.net core 使用Autofac替换本身DI 容器

1、为什么使用Autofac替换DI 容器

   1)、Autofac高性能(使用构造的类越多,性能越好)

         2)、使用方式多样

    a、类型创建RegisterType

     builder.RegisterType<AutoFacManager>();
     builder.RegisterType<Worker>().As<IPerson>();

    b、实例创建

   builder.RegisterInstance(MySingleton.GetInstance()).ExternallyOwned();

    c、Lambda表达式创建

   builder.Register(c => new AutoFacManager(c.Resolve<IPerson>()));
   builder.RegisterType<Worker>().As<IPerson>();

     d、程序集创建

     builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());
     builder.RegisterType<Worker>().As<IPerson>();  

    e、泛型注册

     builder.RegisterGeneric(typeof(List<>)).As(typeof(IList<>)).InstancePerLifetimeScope();
    using (IContainer container = builder.Build())
    {
       IList<string> ListString = container.Resolve<IList<string>>();
    }  

    f、默认的注册

   ContainerBuilder builder = new ContainerBuilder();
    builder.RegisterType<AutoFacManager>();
    builder.RegisterType<Worker>().As<IPerson>();
    builder.RegisterType<Student>().As<IPerson>().PreserveExistingDefaults(); 
    using (IContainer container = builder.Build())
    {
        AutoFacManager manager = container.Resolve<AutoFacManager>();
        manager.Say();  //输出我是一个工人
    } 

2、替换步骤

  1)、使用vs2017生成.net core 项目

  2)、找到Startup.cs

  3)、调整ConfigureServices方法,把void设置返回值IServiceProvider,在最后增加代码如下:

      var builder = new ContainerBuilder();//实例化 AutoFac  容器            
      builder.Populate(services);
      builder.RegisterType(typeof(MemoryCacheService)).As(typeof(ICacheService));//增加配制
      ApplicationContainer = builder.Build();
      return new AutofacServiceProvider(ApplicationContainer);//第三方IOC接管 core内置DI容器

  4)、运行项目无错即成功!

猜你喜欢

转载自www.cnblogs.com/btxu/p/9390413.html
今日推荐