【发布时间】:2022-01-10 14:30:17
【问题描述】:
我有一个 Bar 类,它被定义为 this
public class Bar: IBar
{
private readonly IFoo _foo;
private readonly string _keyname;
public Bar(IFoo, string keyName)
{
//assign class field
}
}
键名字符串区分 Bar 的对象。 Bar 的方法使用这个键名从类外部获取不同的设置/配置。
我希望类的客户端在单个类中具有不同的 Bar 实例。如果我们不使用服务,客户端可以这样做
var bar1 = new Bar(foo, "key1");//instantiate with new
var bar2 = new Bar(foo, "key2");
为了注册 Bar 类,我创建了一个类似这样的扩展方法
public static IServiceCollection AddMyService(this IServiceCollection services, string keyName)
{
services.AddSingleton<IFoo, Foo>();
services.AddTransient<IBar>(sp =>
ActivatorUtilities.CreateInstance<Bar>(sp, keyName)
);
return services;
}
我希望客户端像这样注册多个实例
services.AddMyService("key1");
services.AddMyService("key2");
但我不确定他们将如何通过依赖注入访问他们类中的注册服务。这是解决这个问题的正确方法吗?
【问题讨论】:
-
除了注入服务本身,您还可以让客户注入一个工厂,然后他们使用密钥来获取服务:
var bar1 = _injectedBarFactory.Get("key1")。 -
@GoodNightNerdPride 你能在答案中提供解决方案吗
标签: c# .net-core ioc-container