是否可以使用 ninject 进行依赖项注入(inject),使结果类似于我可以在 MVC 中获得的注入(inject)。详细来说,如果我使用 MVC ninject 适配器,我可以将我的 Web Controller 声明为具有构造函数参数,然后由 ninject 自动注入(inject)。
但是,我还没有找到这样一个 WPF 的 ninject 扩展,它可以让我有一个这样的窗口:
public partial class MainWindow : Window
{
private readonly IService injectedService;
public MainWindow(IService injectedService)
{
this.injectedService = injectedService;
}
}
我想在我的主应用程序启动时不明确使用 IKernel
来获取 mainwindow 的实例。我更愿意使用正常的 xaml 配置方法来获取主窗口和所有后续窗口的实例。
这可能吗?有什么方法可以挂接到 xaml 生成的对象创建,以修改它以使用 Ninject 进行构造函数依赖注入(inject)。
最佳答案
根据评论和您的困惑,看起来 MVVM 很适合您。挑战在于学习 MVVM。
所以破解一个good link开始滚动。 MVVM 非常容易做到,并且很容易用 Ninject 将其全部包装起来并对其鞠躬。
如果您不像我那样使用 Ninject + MVVM 的第 3 方库,最初的学习曲线会有点陡峭。所以这里有几件事我必须明白:
DataContext="{Binding Path=ResultViewModel,Source={StaticResource ServiceLocator}}"
这个小小的添加使您可以触发 ninject 以从 XAML 获取 View 模型信息:
<Application.Resources>
<ioc:NinjectServiceLocator x:Key="ServiceLocator" />
</Application.Resources>
这个小技巧允许您将 app.xaml 文件中的静态资源分配给相关类
public class NinjectServiceLocator
{
private readonly IKernel kernel;
public NinjectServiceLocator()
{
kernel = new StandardKernel(new MyMvvmModule());
}
public ResultViewModel ResultViewModel
{
get { return kernel.Get<ResultViewModel>(); }
}
}
这是值得注意的。每个 View 模型都必须列为 ServiceLocator 中的一个属性,以便 Ninject 生成它们。最后,上面示例中的 MyMvvmModule 是标准的 Ninject 类,您可以在其中覆盖 Load() 并绑定(bind)所有接口(interface)。
关于c# - WPF 中的 Ninject 构造函数注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160450/