Ninject不解析OWIN的依赖关系

public class WebAppHost { public WebAppHost(IAppSettings appSettings) { this._appSettings = appSettings; } public Configuration(IAppBuilder appBuilder) { if(this._appSettings.StartApi) appBuilder.UseWebApi(); } } public class AppContext { public static void Start(string[] args) { DynamicModule.Utility.RegisterModule(typeof(OnePerRequestHttpModule)); DynamicModule.Utility.RegisterModule(typeof(NinjectHttpModule)); _bootstrapper.Initialize(CreateKernel); WebApp.Start("uri"); } private static IKernel CreateKernel() { var kernel = new StandardKernel(); kernel.bind<Func>().ToMethod(ctx => () => new Bootstrapper().Kernel); kernel.bind().To(); RegisterServices(kernel); return kernel; } private static void ReigsterServices(IKernel kernel) { kernel.Bind().To() .InRequestScope(); } } 

当我尝试访问已解析的IAppSettings时,它始终为null并且发生空引用exception。 可能有什么不对?

OWIN启动将为您创建WebAppHost实例,而无需使用容器。 要使用已注入的类执行启动,请使用以下代码:

 public class AppContext { //[...] public static void Start(string[] args) { //[...] _bootstrapper.Initialize(CreateKernel); //Remember to dispose this or put around "using" construct. WebApp.Start("uri", builder => { var webHost = _bootstrapper.Kernel.Get(); webHost.Configuration(builder); } ); } //[...] } 

这将在注入了WebAppHost实例中调用Configuration方法。

PS:作为一个建议 ,我认为你不应该在RegisterServices使用InRequestScope()来进行IAppSettings绑定。 使用单例,瞬态或自定义范围。 根据我的经验,您不需要任何绑定到请求范围的应用程序设置。