我有以下代码
public class Something {
[Inject]
public Configuration config {get;set;} //singleton
[Inject]
public Provider<WindowHandler> windowsProvider { get; set; } //NOT singleton
public void Search(string text) {
WindowHandler handler = windowsProvider.Create(xxxxxx);
//use the new handler that was created
}
}
但似乎提供者采用IContext放置xxxxxx。不应该使用IContext从我引导并从内核创建Something.cs时使用。 Provider上的no参数Create方法在哪里??? (我来自Guice的土地观点,它将像上面那样编码)。
所以问题是如何正确地做到这一点?
感谢, 迪安
答案 0 :(得分:1)
好吧,我的最终解决方案是使用以下代码在ninject 2.0中作弊......
var windowFactory = kernel.Get<IEWindowFactory>();
var tabFactory = kernel.Get<IETabFactory>();
windowFactory.Kernel = kernel;
tabFactory.Kernel = kernel;
并且在绑定列表中我有
Bind<IEWindowFactory>().ToSelf().InSingletonScope();
Bind<IETabFactory>().ToSelf().InSingletonScope();
然后我就开始使用我的应用
var main = kernel.Get<MainForm>();
main.Start();
当然,工厂是在MainForm的层次结构中注入我需要的地方。
所以我在启动时手动放入内核,然后当我引导我的应用程序时,这些工厂自然是带有[Ninject]注释的类中的字段,因此它们可以创建对象。在我们获得3.0之前不是最干净的,但是它可以工作(我讨厌额外的工厂类,我必须编写代码但是很好)。