Ninject(最新版本)可能將接口綁定到特定類中的類型?通過我的意思是...讓我說我有兩個類..可能將接口綁定到特定類中的類型?
ClassA和ClassB,都在構造函數IContext注入..有可能說的綁定類型IContext到ContextA的ClassA和IContext到ContextB到ClassB ?
Ninject(最新版本)可能將接口綁定到特定類中的類型?通過我的意思是...讓我說我有兩個類..可能將接口綁定到特定類中的類型?
ClassA和ClassB,都在構造函數IContext注入..有可能說的綁定類型IContext到ContextA的ClassA和IContext到ContextB到ClassB ?
而不是使用命名綁定也可以使用需要更少的代碼,更類型安全條件的綁定:
Bind<IContext>().To<ContextA>().WhenInjectedInto<SomeClassThatNeedsAContext>();
Bind<IContext>().To<ContextB>().WhenInjectedInto<SomeOtherClassThatNeedsBContext>();
執行此操作的一種方法是使用命名綁定。
kernel.Bind<IContext>().To<ContextA>().Named("A");
kernel.Bind<IContext>().To<ContextB>().Named("B");
kernel.Bind<SomeClassThatNeedsContext>().ToSelf().WithConstructorArgument("context",ninjectContext=>ninjectContext.Get<IContext>("A"));
kernel.Bind<SomeOtherClassThatNeedsContext>().ToSelf().WithConstructorArgument("context",ninjectContext=>ninjectContext.Get<IContext>("B"));
另一種方式可能是隻使用了「WithConstructorArgument」本身
kernel.Bind<SomeClassThatNeedsAContext>().ToSelf().WithConstructorArgument("context",ninjectContext=>ninjectContext.Get<ContextA>());
只是爲了避免混淆,Ninject有上下文的概念爲好,不要混淆與您提供的樣本IContext等
我從經驗中發現的一件事情是,如果我發現自己做這件事,我的界面或類設計中就有一個缺陷。也許你真的需要兩個不同的界面?
羅.. IContext在我的情況表示上下文來訪問特定的數據庫。它只是我在我的項目中爲特定的類使用另一個數據庫,所以我必須將其他上下文注入到它的存儲庫中。這就是爲什麼我不能有2接口加上它沒有意義,我有2個接口。基礎知識庫正在使用IContext。這個想法是能夠將一個上下文傳遞給包含連接字符串的主存儲庫(從配置文件中獲取)。這使我能夠爲一個項目提供多個數據庫。 – Rushino
最簡單! +1這是我認爲的更好的答案。需要更少的代碼。 – Rushino
這很酷,我以前沒見過這個語法,非常有用。 – Brook
@布魯克不用擔心你的回答很好。 :)其實有3個原因,我選擇了這個答案。 1-更直觀。我個人嘗試避免魔術串。 3較少的代碼。 – Rushino