Net核心:通过非控制器库中的依赖注入获取所需服务。例如C#公共图书馆
当我使用Asp.net内核的默认依赖项注入功能时,通过构造函数解析依赖项非常有效 例如 注册:Net核心:通过非控制器库中的依赖注入获取所需服务。例如C#公共图书馆,c#,dependency-injection,asp.net-core,C#,Dependency Injection,Asp.net Core,当我使用Asp.net内核的默认依赖项注入功能时,通过构造函数解析依赖项非常有效 例如 注册: public static void AddServices(this IServiceCollection services, IConfigurationRoot configuration) { services.AddScoped<ICookieManager, CookieManager>(); } protected ICookieManager CookieMana
public static void AddServices(this IServiceCollection services, IConfigurationRoot configuration)
{
services.AddScoped<ICookieManager, CookieManager>();
}
protected ICookieManager CookieManager { get; set; }
public HomeController(ICookieManager cookieManager)
{
this.CookieManager = cookieManager;
}
以上代码非常有效强>
现在,我有一个名为library.Common
的库,其中我编写了一些可供不同项目使用的通用功能
在我的公共库代码中,如果没有构造函数,如何解析依赖关系
我想要这样的东西:
public void CalculateOrder()
{
var cookieManager = ServiceLocator.Instance.GetService<ICookieManager>();
}
public void CalculateOrder()
{
var cookieManager=ServiceLocator.Instance.GetService();
}
有人能帮我找出在Asp.net内核中没有构造函数的情况下如何解决依赖关系吗?就像在公共库中解析一样,在没有构造函数的静态方法中解析
提前谢谢 将其保留为构造函数注入依赖项。如果您的公共库要在使用DI的多个项目中使用,那么它可以正常工作(假设您正确配置DI容器)。如果未使用DI,则可以简单地构造ICookieManager实现的实例,并将其作为参数传递给构造函数
您也可以考虑使用属性注入来实现依赖性,尽管在您的方法,CalgATORD ORD()中,如果没有ICOOKIMANANGER依赖项,仍然可以提供一些函数值。如果这是.NETCore中的一个新项目,那么最好从一开始就做正确的事情
这就是说,如果您非常需要使用ServiceLocator,或者您正在跨多个应用程序迁移项目,并且不想一次完成所有操作就可以使用构造函数DI,那么您可以简单地创建一个使用.NET Core的可注入DI的静态ServiceLocator类这里有一个例子:您只需创建一个静态类,该类只需从.NETCore的服务集合运行“GetService”方法 不要这样做。服务定位器模式击败了首先使用IoC/DI容器的想法。只需使用构造函数注入,就可以开始了。你可以使用抽象它的工厂。当您尝试访问作用域资源时,服务定位器会对您造成很大的伤害。服务定位器是一种反模式,使得测试非常复杂且容易出错。如果您声明没有构造函数,是否可以将
ICookieManager
作为参数传递到CalculateOrder
方法中?