unitycontainer的依赖注入

时间:2015-11-24 16:30:37

标签: c# dependency-injection

我有一个 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对象 在我的客户端课程中?

1 个答案:

答案 0 :(得分:0)

如果要将ISomeClass注册为singleton,请设置lifeTimeManager

Container.RegisterType(ISomeClass, SomeClass, null, new ContainerControlledLifetimeManager());