Ninject:如何解决内核本身/this

本文关键字:内核 this 解决 何解决 Ninject | 更新日期: 2023-09-27 18:26:32

这里是模块:

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; }
}

Ninject:如何解决内核本身/this

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