C# 我们可以用不同的变量注入同一类的多个实例吗?
我们可以用不同的变量注入同一类的多个实例吗C# 我们可以用不同的变量注入同一类的多个实例吗?,c#,.net,.net-core,dependency-injection,C#,.net,.net Core,Dependency Injection,我们可以用不同的变量注入同一类的多个实例吗 services.TryAddScoped<ISomeClass>(sp => { return new SomeClass(1); }); services.TryAddScoped<ISomeClass>(sp => { return new SomeClass(2); }); services.TryAddScoped(sp=> { 返回新的SomeClass(1); }); 服务。TryA
services.TryAddScoped<ISomeClass>(sp =>
{
return new SomeClass(1);
});
services.TryAddScoped<ISomeClass>(sp =>
{
return new SomeClass(2);
});
services.TryAddScoped(sp=>
{
返回新的SomeClass(1);
});
服务。TryAddScoped(sp=>
{
返回新的SomeClass(2);
});
并以某种方式将所需的实例拉入单独的控制器。使用
.TryAddScoped
您只有一个类型实例,如果使用。AddScoped
您可以添加多个实例并在控制器中接收IEnumerable
如果您需要命名实例,我已经创建了自定义解决方案:
public class NamedService<T>
{
public string Name { get; set; }
public T Service { get; set; }
public NamedService(string name, T service)
{
Name = name;
Service = service;
}
}
控制器:
public SomeController(IServiceProvider serviceProvider)
{
var someInstance = serviceProvider.GetService<ISomeClass>("some1");
}
公共SomeController(IServiceProvider服务提供商)
{
var someInstance=serviceProvider.GetService(“some1”);
}
控制器如何知道要拉哪一个?你可以使用IEnumerable
将它们全部拉入,然后过滤得到你想要的,但这并不优雅。谢谢@IanMercer。不确定也许是名字什么的?围绕作品而工作,但真实,不优雅。因此希望看到更好的选择。如果您使用Autofac,您可以使用元数据:但您的用例是什么?为什么不能使用接口实现它?您的意思是,让多个接口从同一个实现类继承?使用控制器中我需要的接口?你能解释一下SomeClass(1)和SomeClass(2)的区别吗?它们是否可以是具有额外接口的不同具体实例?其他选项:(ii)注入Func
工厂?(iii)使用lambda注册调用类,该lambda使用GetRequiredService()
,然后过滤以获取它所需的类-但所有这些都在注册中处理,而不更改任何一个类?
Services.AddScoped("some1", s => new SomeClass(1));
Services.AddScoped("some2", s => new SomeClass(2));
public SomeController(IServiceProvider serviceProvider)
{
var someInstance = serviceProvider.GetService<ISomeClass>("some1");
}