C# Ninject未在现有winforms应用程序中注入
我觉得这只是我在winforms中对DI的误解 我正在尝试在现有的winforms应用程序中实现。在Program.cs中,我正在做类似于C# Ninject未在现有winforms应用程序中注入,c#,winforms,ninject,C#,Winforms,Ninject,我觉得这只是我在winforms中对DI的误解 我正在尝试在现有的winforms应用程序中实现。在Program.cs中,我正在做类似于 IKernel kernel = new StandardKernel(new NinjectBindings()); Application.Run(kernel.Get<MainContainer>()); 该应用程序编译并运行良好,但my _filterEngine实例为null,并且从未调用AddFilterEngine方法。这是因为搜
IKernel kernel = new StandardKernel(new NinjectBindings());
Application.Run(kernel.Get<MainContainer>());
该应用程序编译并运行良好,但my _filterEngine实例为null,并且从未调用AddFilterEngine方法。这是因为搜索结果不是用Ninject创建的吗?它以其父形式硬编码。如果是这样,我假设从这一点开始,每个父级都需要使用Ninject创建?注入仅在通过Ninject创建实例时发生,即通过调用
Kernel.Get()
,这通常只在应用程序中的“最顶端”点或通过Ninject创建此实例本身完成
因此,除非您通过使用自绑定或容器(例如,作为构造函数参数)调用
Kernel.Get()
(假设该类被调用SearchResult
)来创建usercontrol,否则您的方法将永远不会被调用,不幸的是。您需要为Ninject使用字段或属性设置器来在对象创建时注入您的值
[Inject]
public IFilterEngine FilterEngine { get; set; }
如果不知道该属性是公共的,还可以将其作为参数传递给构造函数。这是首选的方法。遵循Ninject网站上的示例
[Inject]
public void AddFilterEngine(IFilterEngine filterEngine)
{
_filterEngine = filterEngine;
}
[Inject]
public IFilterEngine FilterEngine { get; set; }