Catel with Ninject
本文关键字:Ninject with Catel | 更新日期: 2023-09-27 18:29:17
我们公司正在使用Ninject进行DI。我必须用MVVM创建一个WPF应用程序,并想使用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的一个好方法,还是有更好的解决方案?
请参阅关于如何替换默认IoC组件的推荐方法:
https://catelproject.atlassian.net/wiki/display/CTL/Replacing++默认+组件
要创建自己的组件,请让Ninject内核实现正确的接口(例如,IDependencyResolver或IServiceLocator),所有这些都应该设置好。