【发布时间】:2019-01-22 04:00:47
【问题描述】:
我有一个示例,我想使用 DI 在 foreach 循环中创建类的实例,但无法确定要使用哪个生命周期管理器。默认生命周期管理器显然只会使用注入到控制器中的实例,每次调用实例时我都想在其中创建新实例,如下例所示。我正在使用 Microsoft Unity
简单的接口类
public interface ISomeClass
{
string GetValue(string value);
}
public class SomeClass : ISomeClass
{
public string GetValue(string value)
{
return value;
}
}
在容器中注册
container.RegisterType<ISomeClass, SomeClass>(new TransientLifetimeManager());
实施
private readonly SomeClass _someClass;
public MyController(SomeClass someClass)
{
_someClass = someClass;
}
// someStringList would contain values like "hello", "world", "o", "hai"
public void Whatever(List<string> someStringList)
{
List<string> otherStringList = new List<string>();
foreach (var someString in someStringList)
{
// _someClass.GetValue will simply return the same value
otherStringList.Add(_someClass.GetValue(someString));
}
// otherStringList contain as many elements as the someStringList
// but all will be the same as the last element in the list
}
【问题讨论】:
-
第一件事,你为什么要插入具体类型而不是界面?一种可能的解决方案是创建工厂接口并在 for 循环中创建新实例...
-
@Johnny 是的,我可以看到我的示例有点混乱
标签: c# dependency-injection unity-container