c# - WPF 中的 Ninject 构造函数注入(inject)

标签 c# wpf ninject

是否可以使用 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/

相关文章:

c# - WPF 中的 Treeview 加载事件之后

c# - 将 Ninject 与 Owin 和 InRequestScope 结合使用

java - 修复记录: Cell information from worksheet created

C# 内存管理

c# - SharePoint2010中的ConversionJob将docx转换为pdf需要很长时间或非常慢

c# - 显示分层数据的 WPF 组合框

c# - 计算e数C#

c# - ListView + 多选 + MVVM =?

c# - 如何注入(inject) UserManager & SignInManager

c# - 如何处理 MVVM 应用程序中的构造函数过度注入(inject)