gpt4 book ai didi

wpf - Ninject:解决二级内部依赖

转载 作者:行者123 更新时间:2023-12-03 10:26:20 25 4
gpt4 key购买 nike

我正在进入 Ninject。简化我的真实场景,我有一个带有属性注入(inject)的 A 类:

public class NinjectBindings : NinjectModule
{
public override void Load()
{
Bind<IMasterViewModel>().To<IQMasterViewModel>();
}
}

public class A
{
[Inject]
public IMasterViewModel _viewModel
{
get;
set;
}

public A()
{
}
}

还有一个通过默认构造函数实例化 A 的 B 类:
public class B
{
public A a = new A();
}


Ninject.IKernel kernel = new StandardKernel(new NinjectBindings());
var b = kernel.Get<B>();

如果我尝试使用 Ninject.kernell.Get() 来解析 B 类,则调用 A 类的依赖项将不会注入(inject)到 A 实例中。
如果我不能改变对象 A 的实例化方式,谁能建议处理这种注入(inject)的正确方法是什么?
因为在实际场景中,B 类是 WPF 窗口,A 类是 XAML 中声明的 UserControl。
谢谢。

最佳答案

为了让 A 注入(inject)其依赖项,它需要由 Ninject 实例化。

当使用 IoC 时,你应该传递依赖而不是在类中实例化 new .因此,您可以通过将 A 作为构造函数参数传递给 B 来解决此问题,而不是在构造函数中自己实例化它。

public class B
{
public A MyA;

public B(A a)
{
MyA = a;
}
}

根据类的设置方式,您可能需要创建绑定(bind)或让它们自绑定(bind)。我建议为 A 和 B 创建接口(interface)并将它们绑定(bind)到具体类型,因为它使代码更容易使用模拟框架进行测试。

请注意,您发布的绑定(bind)...
Bind<IMasterViewModel>().To<IQMasterViewModel>();

似乎将接口(interface)绑定(bind)到接口(interface)而不是具体类型,这是错误的。

关于wpf - Ninject:解决二级内部依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com