Ninject属性注入返回null

mat*_*wen 9 c# ninject winforms

我有一个WinForms应用程序,代码如下:

static void Main()
{
    IKernel kernel = new StandardKernel(new MyModule());
    TestInterface test = kernel.Get<TestInterface>();
}
Run Code Online (Sandbox Code Playgroud)

对于Module.Load()事件:

Bind<TestClass>().ToSelf().InSingletonScope();
Bind<TestInterface>().To<TestClass>();
Run Code Online (Sandbox Code Playgroud)

此时testMain()方法是我期待适当的对象.

在稍后的表单中,我正在使用属性注入:

[Inject]
TestInterface test {get;set;}
Run Code Online (Sandbox Code Playgroud)

一旦表单被加载,尝试使用test,但它是一个空对象.

思考?

Kev*_*ock 3

确保在 IKernel 实例上调用 Inject() 并传入表单的实例。这将确保正确注入所有依赖项。例如...

[Inject]
TestInterface Test { get; set; }

private void Form_Load(object sender, EventArgs e)
{            
    IKernel kernel = ... // Get an instance of IKernel
    kernel.Inject(this);

    // Your form dependencies have now been injected and the 
    // Test property is ready to use
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢凯文,它解决了问题,但我想我正在寻求更好的解决方案。我一直在阅读有关大量注入和接听电话的“难闻气味”,因为这不是真正的 DI。我正在尝试属性注入,因为每当我实例化一个对象时,构造函数注入似乎都会妨碍我。拥有内核实例似乎也是一种倒退? (4认同)