在.NET核心类库中使用依赖注入(.NET标准)

时间:2016-12-25 18:33:21

标签: dependency-injection asp.net-core .net-core asp.net-core-webapi visual-studio-2017

我已通过链接:

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/dependency-injection

并了解到如何为Web API使用依赖注入。

如上所述,我可以使用Startup(Startup.cs)类在API层内部进行依赖注入。但是如何实现.NET核类库的依赖注入。下面是我如何添加类库的截图。  enter image description here

我的项目结构是

enter image description here

在项目“DataManagement.Repository”中,我编写了一个“UserRepository”类,并在项目“DataManagement.Repository.Interfaces”中编写了一个接口“IUserRepository”。

在“DataManagement.Business”项目中,我编写了一个“UserManager”类

class UserManager
    {
        private IUserManager _userManager;
        public UserManager(IUserManager userManager)
        {
            _userManager = userManager;
        }
    }

正如您所看到的,我正在尝试通过构造函数实现依赖注入。

但我不确定在.NET Core Class Library(.NET Standard)中启用依赖注入需要做些什么更改。

1 个答案:

答案 0 :(得分:21)

您不必在类库中执行任何操作。只有主应用程序具有composition root(应用程序生命周期中最早的点,您可以设置对象图)。

这在ASP.NET核心应用程序的Startup.cs中发生。在那里你还注册了你的依赖项:

services.AddScoped<IUserManager,UserManager>();

就是这样。类库没有组合根。它们都不应该,因为如果没有应用程序就无法使用它们,并且使用的IoC容器是应用程序的选择,而不是库的选择。

但是,您可以提供便捷方法来执行此注册,例如ASP.NET Core中常见的AddXxx方法或某种模块系统,例如第三方IoC容器,如Autofac或Castle Windsor。