Ninject不解析OWIN的依赖关系
本文关键字:依赖 关系 OWIN Ninject | 更新日期: 2023-09-27 17:50:24
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<WebAppHost>("uri");
}
private static IKernel CreateKernel() {
var kernel = new StandardKernel();
kernel.bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
private static void ReigsterServices(IKernel kernel) {
kernel.Bind<IAppSettings>().To<AppSettings>()
.InRequestScope();
}
}
当我尝试访问解析的IAppSettings时,它总是为空,并且发生空引用异常。会出什么问题呢?
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<WebAppHost>();
webHost.Configuration(builder);
} );
}
//[...]
}
这将在注入IAppSettings
的WebAppHost
实例中调用Configuration
方法。
PS:作为建议,我认为你不应该在RegisterServices
中为IAppSettings
绑定使用InRequestScope()
。使用单例、瞬态或自定义作用域。根据我的经验,您不需要任何绑定到请求范围的应用程序设置。