我正在使用Ninject來處理我的依賴關係。將容器/內核注入主應用程序演示者是否正確?
我的ApplicationPresenter
負責在整個應用程序中調用用戶調用功能,因此需要一次注入多個工廠,因此需要注入容器本身。它處理一個MDI GUI。
- 有沒有更好的方法?
- 它可以嗎?
ApplicationPresenter
public class ApplicationPresenter
: Presenter<IApplicationView>
, IApplicationPresenter {
public ApplicationPresenter(IApplicationView view, IKernel dependencies)
: base(view) {
Dependencies = dependencies;
View.Connect += OnConnect;
View.ManageInquiries += OnManageInquiries;
}
private static readonly IKernel Dependencies;
}
的ApplicationPresenter
負責在MDI窗口編排系統的功能,如:
- 用戶認證
- 管理諮詢...
我有一個AuthenticationPresenter
和InquiryManagementPresenter
這兩個都要從ApplicationPresenter
稱爲像這樣:
用戶點擊...
public class ApplicationPresenter : ... {
// See ctor for event subscription...
private void OnConnect() {
AuthenticationPresenter authentication =
Dependencies.Get<IAuthenticationPresenter>();
authentication.ShowView();
}
private void OnManageInquiries() {
InquiriesManagementPresenter inquiriesManagement =
Dependencies.Get<IInquiriesManagementPresenter>();
inquiriesManagement.ShowView();
}
}
而且InquiriesManagementPresenter
內,我對其他的依賴主持人:
- NewInquiryPresenter
- EditInquiryPresenter
- CancelInquiryPresenter
- ApproveInquiryPresenter ...
Ninject模塊
public class ApplicationModule : NinjectModule {
public void Load() {
Bind<IApplicationPresenter>().To<ApplicationPresenter>().InSingletonScope();
Bind<IApplicationView>().To<ApplicationForm>();
}
}
public class AuthenticationModule : NinjectModule {
public void Load() {
Bind<IMembershipService>().To<MembershipService>();
Bind<IAuthenticationPresenter>().To<AuthenticationPresenter>().InSingletonScope();
Bind<IAuthenticationView>().To<AuthenticationForm>();
Bind<ICredentials>().To<Credentials>().InSingletonScope();
Bind<IUser>().To<User>().InSingletonScope();
Bind<IDatabaseInstance>().To<DatabaseInstance>().InSingletonScope();
Bind<IDatabaseUser>().To<DatabaseUser>().InSingletonScope();
}
}
public class InquiryManagementModule : NinjectModule {
public void Load() {
Bind<INewInquiryPresenter>().To<NewInquiryPresenter>().InSingletonScope();
Bind<INewInquiryView>().To<NewInquiryForm>();
Bind<IEditInquiryPresenter>().To<EditInquiryPresenter>().InSingletonScope();
Bind<IEditInquiryView>().To<EditInquiryForm>();
Bind<IInquiryRepository>().To<InquiryRepository>();
// ...
}
}
所以,我覺得很簡單的傳遞Ninject的IKernel
從演示到另一個用於那些需要多個功能,如InquiryManagementPresenter
或ApplicationPresenter
。
那麼,這是好的還是有另一種更好的方法來實現這一目標?
儘管可能重複地址的問題存在相同的問題,但上下文有很大的不同,因爲我沒有循環遍歷整個案例,而只使用了MDI應用程序。如果至少我能理解如何將其「翻譯」到我的上下文中,我將同意依靠提供給問題的答案。 –
@MarkSeemann,感謝您指出這個問題。在我的搜索旁邊,我沒有發現這個問題。另外,它只需要TestParser通過TestParser構造函數來獲取兩個參數。其實,那已經是我所做的了。雖然我已經閱讀了這個問題及其所有答案,但我的問題仍然存在,有什麼更好的方法?我是否自己創建一個容器來包裝Ninject IKernel,或者直接傳遞IKernel,否則呢?......老實說,我在這裏有點困惑。我只需要一個踢開始,請。 –
我試圖回答一個正確的答案,然後:) –