zoukankan      html  css  js  c++  java
  • .Net core使用Autofac进行依赖注入示例

    一、官方文档

    https://autofaccn.readthedocs.io/zh/latest/index.html

    二、新建.net core 控制台程序

    三、注册类型,示例一

    1、新建接口 IPerson

        public interface IPerson
        {
            void Introduction();
        }

    2、实现接口,新建类Worker

        public class Worker : IPerson
        {
            public void Introduction()
            {
                Console.WriteLine("I am a worker");
            }
        }

    3、新建类RegisterConsoles并注册组件

      public class RegisterConsoles
        {/// <summary>
            /// 通过类型注册来注入
            /// </summary>
            public static void TypeRun()
            {
                var builder = new ContainerBuilder();
                builder.RegisterType<Worker>().As<IPerson>();
                var container = builder.Build();
                var serviceProvider = new AutofacServiceProvider(container);
                var person = serviceProvider.GetService<IPerson>();
                person.Introduction();
                Console.ReadKey();
            }
        }

    4、执行程序

        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("autofac demo");
                RegisterConsoles.TypeRun();
            }
        }

    输出如图信息:

    四、如果有很多组件需要注册呢,难道每一个都要写一行代码吗,显然是不合适的。因此可以通过程序集反射来注册

    示例二:

    1、新建接口

        /// <summary>
        /// 继承此接口则自动注入
        /// </summary>
        public interface IDependency
        {
        }

    2、添加自动注入的逻辑,新建类AutoRegister

        public class AutoRegister
        {
            /// <summary>
            /// 自动注入
            /// </summary>
            /// <returns></returns>
            public AutofacServiceProvider Build()
            {
                var builder = new ContainerBuilder();
                Type dependencyType = typeof(IDependency);
                var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToArray();
                builder.RegisterAssemblyTypes(assemblys)
                    .Where(type => dependencyType.IsAssignableFrom(type) && !type.IsAbstract)
                    .AsImplementedInterfaces().InstancePerLifetimeScope();
                var container = builder.Build();
                var serviceProvider = new AutofacServiceProvider(container);
                return serviceProvider;
            }
        }

    3、新建类Teacher,实现接口IPerson,和IDependency

        class Teacher : IPerson, IDependency
        {
            public void Introduction()
            {
                Console.WriteLine("I am a teacher");
            }
        }

    4、运行程序

            static void Main(string[] args)
            {
                Console.WriteLine("autofac demo");
                RegisterConsoles.AssemblyRun();
            }

    输出如下图:

    参考

    https://stackoverflow.com/questions/26957519/ef-core-mapping-entitytypeconfiguration

  • 相关阅读:
    GFS文件系统和在RedHat Linux下的配置
    FastDFS connect timed out
    大型高并发高负载网站的系统架构
    FastDFS 上传文件
    FastDFS常见命令
    FastDFS安装、配置、部署
    分布式文件系统FastDFS原理介绍
    Jenkins+Maven+Svn搭建持续集成环境持续集成和自动部署
    Java中的向上转型和向下转型
    Java中的final修饰符
  • 原文地址:https://www.cnblogs.com/dayang12525/p/10750829.html
Copyright © 2011-2022 走看看