【发布时间】:2014-11-06 09:04:19
【问题描述】:
我们公司正在使用 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的好方法还是有更好的解决方案?
【问题讨论】:
标签: c# mvvm ninject inversion-of-control catel