2
我得到了小小的接口ITEST:Ninject問題越來越實例
public interface ITest
{
void DoSomething();
}
和ITEST
的一些實現public class Test : ITest
{
public void DoSomething()
{
throw new NotImplementedException();
}
}
public class Test2 : ITest
{
public void DoSomething()
{
throw new NotImplementedException();
}
}
public class Test3 : ITest
{
public void DoSomething()
{
throw new NotImplementedException();
}
}
public class Test4 : ITest
{
public void DoSomething()
{
throw new NotImplementedException();
}
}
現在我建立Ninject:
kernel.Bind<ITest>().To<Test>().Named("Test");
kernel.Bind<ITest>().To<Test2>().Named("Test");
kernel.Bind<ITest>().To<Test3>().Named("Test");
kernel.Bind<ITest>().To<Test4>().Named("Test");
這裏是我的第一個問題。
如果IAM試圖讓使用
ITest test = kernel.Get<ITest>("Test");
它會導致異常的實例「錯誤激活ITEST不止一個匹配的綁定是可用的。......」。該文檔說:「通過使用具有指定名稱的第一個綁定來獲取指定服務的實例。」
問題二:
List<ITest> servicesList = new List<ITest>(kernel.GetAll<ITest>("Test"));
導致異常「錯誤激活字符串,不匹配的綁定是可用的,並且該類型不是自綁定...」。該文檔說:「使用以指定名稱註冊的綁定獲取指定服務的所有實例。」
任何想法?提前致謝!
註冊您的內核的時候給他們不同的名字起初=>感謝您的回答;) 對於第一個情景我必須改變我的邏輯,沒問題。但爲什麼kernel.GetAll(typeof(ITest))與kernel.GetAll()不同? –
dknaack
@dknaack,除了在編譯時的強類型,'kernel.GetAll(typeof(ITest))'和'kernel.GetAll()'在運行時返回完全相同的對象實例到結果列表中。 –
kernel.GetAll()工作得很好,但 kernel.GetAll(typeof運算(ITEST))會拋出異常「錯誤激活ITEST不止一個匹配的綁定是可用的。......」 ?爲什麼」 .Named(字符串)「存在,當我不能綁定多個類型?爲什麼kernel.GetAll(typeof(ITest))與kernel.GetAll ()不同?根據文檔,Get方法將「通過使用具有指定名稱的FIRST綁定獲取指定服務的實例」。 –
dknaack