我的WPF桌面應用程序正試圖使用Ninject注入一些接口依賴關係,如下所示。該應用程序的啓動是這樣的,(我認爲)自動生成:Ninject無法解析WPF中的構造函數注入
void App_Startup(object sender, StartupEventArgs e)
{
IKernel _Kernel = new StandardKernel();
_Kernel.Load(Assembly.GetExecutingAssembly());
}
然後我有一個NinjectModel
-extending類,其Load方法得到由上面的調用,並且發生結合,像這樣:
Bind<Inheritance.IWindowProvider>().To<WindowProvider>().InSingletonScope();
我的視圖模型然後採取IWindowProvider
,在這種情況下,我還添加了[Inject]
屬性。
[Inject]
public LoginDetailsVM (IWindowProvider windowProvider) {
this.WindowProvider = windowProvider;
}
別處然後(在另一個VM),我想使這個視圖模型的實例:
IKernel kernel = new StandardKernel();
LoginDetailsVM loginDetails = kernel.Get<LoginDetailsVM>();
但是我得到的 「可怕的」 錯誤:
Error activating IWindowProvider
No matching bindings are available, and the type is not self-bindable.
我最初的搜索是,我實例化兩次可能是StandardKernel
問題,但我不確定如何訪問它,否則。
當然,必須傳遞一個內核實例有點失敗的注射點之一?
此外,是否明確Get<T>()
形式獲得實例的公認的選擇,或者是否有更好的隱式方法調用注入的構造函數?
對於這裏可能看起來天真的理解的道歉,我對Ninject和DI一般都是全新的。
請在您的文章中包含'WindowProvider'的源代碼。 – mjwills
https://stackoverflow.com/a/38347614/34092有幫助嗎? – mjwills
@mjwills'IWindowProvider'只包含兩個方法,這些方法由'WindowProvider'實現,它也包含一個公共的空白構造函數。 我試過鏈接的文章,但得到了空引用異常。 – Dan