我有一个 C#库,如下所示:
public SomeClass<T> : ISomeClass<T>{
public SomeClass(IMainClass mainClass){ this._mainclass=mainClass }
}
public MainClass : IMainClass {
private Dictionary<string,dynamic> _myDic;
public MainClass() { /* some code */ }
public ISomeClass<T> ReturnSomeClass()
{
if(_myDic.Contains(ISomeClass<T>)
return _myDic.Value //**someclass<T> type
//add to _myDic
return new SomeClass<T>();
}
}
public OtherClass<T> : IOtherClass<T> {
public OtherClass(ISomeClass<T> someClass) { this._someClass=someClass }
}
接下来,我在 Microsoft Unity 中注册此类用于DI。
class Boot{
public void Registering(){
container.RegisterType<ISomeClass,SomeClass>();
container.RegisterType<IMainClass,MainClass>();
container.RegisterType<IOtherClass,OtherClass>();
}
}
当我的客户端类是Calling container.Resolve&lt; IMainclass&gt;(),mainClass中的ctor是fire,并且创建了MainClass的实例。现在,container.Resolve&lt; IOtherClass&gt;()在客户端类ctor中调用,因为它是火和 通过DI,创建了一个新的SomeClass。除了DI创建SomeClass之外,这个类的ctor也在调用,并且创建了一个新的mainClass。
如何只能在Resolve by container上创建一个MainClass对象 在我的客户端课程中?
答案 0 :(得分:0)
如果要将ISomeClass注册为singleton,请设置lifeTimeManager
Container.RegisterType(ISomeClass, SomeClass, null, new ContainerControlledLifetimeManager());