Наша компания использует Ninject для DI. Мне нужно создать приложение WPF с MVVM и использовать Catel. Поскольку наши службы с DB DataContext внедряются с помощью Ninject, я не знаю, с чего начать.
Я начал с подготовленного каркасного проекта. Вот что содержит App.xaml.cs:
public partial class App : Application
{
public IKernel Container;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ConfigureContainer();
ComposeObjects();
Current.MainWindow.Show();
}
private void ConfigureContainer()
{
var modules = new INinjectModule[]
{
new ServiceModule()
};
Container = new StandardKernel(modules);
}
private void ComposeObjects()
{
Current.MainWindow = Container.Get<MainWindow>();
Current.MainWindow.Title = "DI with Ninject";
}
}
ServiceModule
унаследован от NinjectModule
.
С этим кодом я могу использовать этот конструктор моего MainWindow
:
public MainWindow(IAuthenticationService authenticationService)
{
InitializeComponent();
ViewModel = new MainWindowViewModel(authenticationService);
DataContext = ViewModel;
}
IAuthenticationService
вводится через App.xaml.cs и Ninject. На мой взгляд, это решение сложно поддерживать, потому что, если мне нужен новый сервис, я должен добавить его в конструктор моего MainWindow
. Теперь мне нужно то же самое для работы с Catel, но я что-то не нашел в документации.
РЕДАКТИРОВАТЬ: я обнаружил в документации, что могу зарегистрировать внешний контейнер IoC. Как мне создать свой собственный компонент (документ: Замена компонентов по умолчанию), который работает со стандартным ядром Ninject?
Также это хороший подход к DI или есть лучшие решения?