Dependency injection 使用.NET核心类库(.NET标准)的依赖项注入
我浏览了以下链接: 并学会了如何使用Web API的依赖注入 正如上面链接中提到的,我可以使用Startup(Startup.cs)类在API层内进行依赖项注入。但是如何为.NET核心类库实现依赖注入呢。下面是我如何添加类库的截图。 我的项目结构是 在项目“DataManagement.Repository”中,我编写了一个类“UserRepository”,在项目“DataManagement.Repository.Interfaces”中,我编写了一个接口“IUserRepository” 在“DataManagement.Business”项目中,我编写了一个类“UserManager”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
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`方法中进行注册。