如何用我自己的IoC替换内置的IoC?

时间:2016-07-22 19:33:20

标签: asp.net-core

众所周知,在asp.net Startup 类中,有一种方法 ConfigureServices ,我们可以添加自定义服务。服务通过依赖注入提供。

  

ASP.NET Core包含一个简单的内置控制反转(IoC)   默认情况下支持构造函数注入的容器,但也可以   很容易被您选择的IoC容器取代。除了它   松散耦合效益,DI可在您的整个过程中提供服务   应用

我的问题是如何用我自己的IoC替换内置的IoC?

如果你有,请给我一个例子。

2 个答案:

答案 0 :(得分:7)

ASP.NET Core目前有许多不同的容器,包括

在每种情况下,具体使用它们的方式都不同,但基本上它们都遵循相同的模式:

  • 使用内置容器
  • 照常注册依赖项
  • 创建第三方容器的实例
  • 将任何其他注册添加到第三方容器
  • 使用内置容器中的注册填充新容器
  • 从第三方容器中返回IServiceProvider

值得注意的是,围绕这些库将与内置容器集成的方式发生了许多对话。评论here提供了对话的完美摘要,您也可以直接进入GitHub herehere的讨论。

答案 1 :(得分:0)


  

在ASP.Net Core中实现Autofac的示例代码


 //here added Autofac library and inherit module class
 //Instance of your third-party Container
 Step I:
 public class MotorServiceModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<RequestResponseRespository>().As<IRequestResponseRespository>();
        }
    }

Step II:
    public IServiceProvider ConfigureServices(IServiceCollection services)
        {
        //added scoped IExtRepository and RequestResponseRespository class
           services.AddScoped<IExtRepository>(repository => new RequestResponseRespository(Configuration)));
            //Add Autofac
            //Populate the new container initialize container 
            //Return AutofacServiceProvider which 
//Step III:     
            var containerBuilder = new ContainerBuilder();
            containerBuilder.RegisterModule<MotorServiceModule>();
            containerBuilder.Populate(services);
            var container = containerBuilder.Build();
            return new AutofacServiceProvider(container);
         }