I use Ninject to handle dependencies.
My ApplicationPresenter is responsible for sending user calls to functions throughout the application, therefore, you need to enter several plants at once, thus the container itself. It processes the MDI GUI.
- Is there a better approach?
- Can this be done?
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 is responsible for organizing the system functions in the MDI window, for example:
- User identification
- Query Management ...
I have AuthenticationPresenter and InquiryManagementPresenter , which are both called from ApplicationPresenter as follows:
User clicks ...
public class ApplicationPresenter : ... {
And inside InquiriesManagementPresenter , I have dependencies on other presenters like:
- NewInquiryPresenter
- EditInquiryPresenter
- CancelInquiryPresenter
- ApproveInquiryPresenter ...
Ninject Modules
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>(); // ... } }
So, itβs easier for me to skip the Ninject IKernel from presenter to another for those that require several features, such as InquiryManagementPresenter or ApplicationPresenter .
So, is everything all right, or is there an even better way to achieve this?
source share