2017-06-17 76 views
0

假設我有從IClass繼承的ClassA和ClassB。現在我有一個LightInject容器和註冊ClassA的實例作爲C#LightInject - 如何用另一個替換容器中的實例

ClassA classA = new ClassA(); 
Helpers.Container.RegisterInstance(typeof(IClass), classA, "Class"); 

現在我想用CLASSB更換CLASSA作爲

ClassB classB = new ClassB(); 
Helpers.Container.RegisterInstance(typeof(IClass), classB, "Class"); 

這樣,當我嘗試在其他類來獲得一個實例可以得到classB而不是classA

​​

但是,當我嘗試獲取實例時,我總是得到classA。我怎麼解決這個問題?謝謝。

更新:

我有一個IF語句來控制我要註冊哪個實例,如

if (name == "classA") 
{ 
    ClassA classA = new ClassA(); 
    Helpers.Container.RegisterInstance(typeof(IClass), classA, "Class"); 
} 
else 
{ 
    ClassB classB = new ClassB(); 
    Helpers.Container.RegisterInstance(typeof(IClass), classB, "Class"); 
} 

在我的代碼,第一輪,病情會是真的。因此,我將把classA註冊到容器中。第二輪,條件將是錯誤的。因此,我希望classB將被註冊到容器中。當我嘗試獲得實例時,我會在第一輪之後獲得classA,然後在第二輪中獲得classB。但是,目前的情況是,在兩輪比賽中,我獲得了A級。

+0

您是否註釋掉了'Helpers.Container.RegisterInstance(typeof(IClass),classA,「Class」);'line? – mjwills

+0

'if(true)'總是會進入第一個分支。什麼情況? – Nkosi

+0

這只是一個例子。它可以是任何條件,如if(name ==「classA」) – Ben

回答

0

我是LightInject的作者。

可能是因爲您嘗試在解決問題後註冊服務。很難說沒有一個完整的例子。在LightInject回購中創建一個小回購鏈接的問題,我們將幫助您解決問題

相關問題