Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 使用.NET核心类库(.NET标准)的依赖项注入_Dependency Injection_Asp.net Core_.net Core_Asp.net Core Webapi_Visual Studio 2017 - Fatal编程技术网

Dependency injection 使用.NET核心类库(.NET标准)的依赖项注入

Dependency injection 使用.NET核心类库(.NET标准)的依赖项注入,dependency-injection,asp.net-core,.net-core,asp.net-core-webapi,visual-studio-2017,Dependency Injection,Asp.net Core,.net Core,Asp.net Core Webapi,Visual Studio 2017,我浏览了以下链接: 并学会了如何使用Web API的依赖注入 正如上面链接中提到的,我可以使用Startup(Startup.cs)类在API层内进行依赖项注入。但是如何为.NET核心类库实现依赖注入呢。下面是我如何添加类库的截图。 我的项目结构是 在项目“DataManagement.Repository”中,我编写了一个类“UserRepository”,在项目“DataManagement.Repository.Interfaces”中,我编写了一个接口“IUserRepositor

我浏览了以下链接:

并学会了如何使用Web API的依赖注入

正如上面链接中提到的,我可以使用Startup(Startup.cs)类在API层内进行依赖项注入。但是如何为.NET核心类库实现依赖注入呢。下面是我如何添加类库的截图。

我的项目结构是

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

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

class UserManager
    {
        private IUserManager _userManager;
        public UserManager(IUserManager userManager)
        {
            _userManager = userManager;
        }
    }
正如您所看到的,我正试图通过构造函数实现依赖项注入


但我不确定在.NET核心类库(.NET Standard)中启用依赖项注入需要做哪些更改。

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

这发生在ASP.NET核心应用程序的
Startup.cs
中。您还可以在此处注册依赖项:

services.AddScoped<IUserManager,UserManager>();
services.addScope();
就这样。类库没有组合根。它们都不应该,因为没有应用程序就不能使用它们,而使用的IoC容器是应用程序的选择,而不是库的选择


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

正如u在回答中所说,如果我在asp.net核心应用程序的
Startup.cs
中添加此依赖项,然后添加对.NetCore类库的引用,我可以使用它?是的,如果您一直使用依赖项注入(并且从不实例化服务
new
)我在
http://stackoverflow.com/questions/41342064/using-ihostingenvironment-in-netcore-library
如果可以,请给我帮助。感谢.Api项目是否必须引用.Repository项目才能访问.Repository接口的实现?@WillC:是的,因为您的合成根是web应用程序。您可以使用扩展方法(例如ASP.NET Core使用
.AddXyz
)将其抽象一点,您可以在.AddXyz`方法中进行注册。