在基础设施层中使用依赖注入

时间:2016-12-23 13:19:45

标签: c# dependency-injection asp.net-core asp.net-core-mvc autofac

我在ASP.net Core中创建了一个示例项目时使用了四个层,如下所示

enter image description here

我还在我的API项目中的startup.cs中实现了依赖注入。并且它的工作完美。

services.AddTransient<IUserRepository, UserRepository>();

我有两个问题要问。

  1. 我的Infrastructure层可以依赖注入,而不是API层吗?如果是的话,你可以指导我如何做吗?

  2. 如果我错了,请纠正我。如果Asp.Net Core默认具有依赖注入,那么我们就不需要Autofac(或类似的第三方DI插件)。对?让我重新解释一下这个问题。什么是在Asp Core中使用Autofac?

  3. 任何建议都会有所帮助。

    谢谢。

1 个答案:

答案 0 :(得分:5)

  1. 当然可以。像任何其他DI一样工作。我的例子是:
  2. 为您的Infrastructure层提供一个Config类,其中包含一个在其签名中需要IServeCollection的Configure方法,如下所示:

        public static class InfrastructureConfiguration
    {
        public static void Configure(IServiceCollection services)
        {
    
        }
    }
    

    您可以从Startup类中的ConfigureServices方法调用此Configure方法。

    在configure方法中,您可以连接所需的内容,例如,您可以使用MyAwesomeInfraClass:

        public static class InfrastructureConfiguration
    {
        public static void Configure(IServiceCollection services)
        {
           services.AddTransient<MyAwesomeInfraClass>();
        }
    }
    

    现在您可以将MyAwesomeInfraClass注入您想要的任何位置,例如在控制器中,如下所示:

        public class HomeController : Controller
    {
         private readonly MyAwesomeInfraClass _myAwesomeInfraClass;
    
         public HomeController(MyAwesomeInfraClass myAwesomeInfraClass){
           _myAwesomeInfraClass = myAwesomeInfraClass;
         } 
    }
    
    1. 如果.NET Core中的默认容器为您提供了所需的一切,那么您无需再进一步了解。但我们使用Autofac替换默认容器,然后使用NServiceBus替换Autofac的容器,因为它是在我们的分布式系统中共享的容器,因为它具有非常酷的功能,只需扫描程序集并自动注册组件。这是一个例子。这实际上取决于你的用例。