Ninject:如何解决内核本身/这个?

时间:2013-08-06 10:57:55

标签: c# wpf dependency-injection ninject

这是模块:

public class InjectModule : NinjectModule
{
    public override void Load()
    {
        Bind<DbContext>().ToSelf().InSingletonScope();
        Bind<ISomeRepository>().To<SomeRepository>()
            .InThreadScope();
        Bind<MainWindow>().ToSelf().InThreadScope();
        Bind<IKernel>() //how to bind???
    }
}

我的应用:

protected override void OnStartup(StartupEventArgs e)
{         
    IKernel kernel = new StandardKernel(new InjectModule());
    MainWindow window = kernel.Get<MainWindow>();
    window.Show();
    base.OnStartup(e);
}

我在主窗口中需要内核作为属性DependencyResolver。如何使其有效?

public partial class MainWindow
{
    [Inject]
    public IKernel DependencyResolver { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您不应该直接在模块外部使用内核。内核本身具有自动模块加载功能,可以根据需要扫描基本目录中的ninject模块。如果组件需要解析特定实例,则应使用提供的扩展,例如工厂扩展,它允许根据接口注入Func,Lazy或动态工厂。如果任何扩展没有帮助,那么注入IResolutionRoot接口但从不注入IKernel!