这是模块:
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; }
}
答案 0 :(得分:1)
您不应该直接在模块外部使用内核。内核本身具有自动模块加载功能,可以根据需要扫描基本目录中的ninject模块。如果组件需要解析特定实例,则应使用提供的扩展,例如工厂扩展,它允许根据接口注入Func,Lazy或动态工厂。如果任何扩展没有帮助,那么注入IResolutionRoot接口但从不注入IKernel!