如何在Ninject中使用Provider

时间:2012-01-03 17:33:54

标签: c# ninject

我有以下代码

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的土地观点,它将像上面那样编码)。

所以问题是如何正确地做到这一点?

感谢, 迪安

1 个答案:

答案 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之前不是最干净的,但是它可以工作(我讨厌额外的工厂类,我必须编写代码但是很好)。