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的一个好方法,还是有更好的解决方案?

Catel with Ninject

请参阅关于如何替换默认IoC组件的推荐方法:

https://catelproject.atlassian.net/wiki/display/CTL/Replacing++默认+组件

要创建自己的组件,请让Ninject内核实现正确的接口(例如,IDependencyResolver或IServiceLocator),所有这些都应该设置好。