我们公司正在使用Ninject for DI。我必须用MVVM创建一个WPF应用程序,并且想要使用Catel。 因为我们的服务具有DB DataContext注入Ninject,我不知道从哪里开始。Catel与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的一个好方法还是有更好的解决方案?
你的意思是这种方法(NinjectDependencyResolver)? http://stackoverflow.com/questions/22221314/catel-ninject-ninject-activationexception-when-resolving-iuivisualizerservice 如果不是,我该如何让Ninject内核实现接口? – 2014-11-06 11:07:57
不,即将到来的4.0已经改进了对外部容器的支持。您可以注册容器(比如Ninject ServiceLocator),并且所有服务都应该自动为您注册。 – 2014-11-06 13:31:26