Asp.net mvc Ninject从OnApplicationStarted注入依赖项
我正在使用从我的Global.ascx.cs文件中启动的OnApplication中的服务。有没有一种方法可以从那里注入存储库 我的代码:Asp.net mvc Ninject从OnApplicationStarted注入依赖项,asp.net-mvc,asp.net-mvc-3,ninject,Asp.net Mvc,Asp.net Mvc 3,Ninject,我正在使用从我的Global.ascx.cs文件中启动的OnApplication中的服务。有没有一种方法可以从那里注入存储库 我的代码: public class MvcApplication : NinjectHttpApplication { //Need to dependency inject this. private IBootStrapService bootService; protected override void OnApplicationSt
public class MvcApplication : NinjectHttpApplication
{
//Need to dependency inject this.
private IBootStrapService bootService;
protected override void OnApplicationStarted()
{
//Used to set data such as user roles in database on a new app start.
bootService.InitDatabase();
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
internal class SiteModule : NinjectModule
{
public override void Load()
{
//I set my bindings here.
Bind<IBootStrapService>().To<BootStrapService>();
Bind<IUserRepository>().To<SqlServerUserRepository>()
.WithConstructorArgument("connectionStringName", "MyDb");
}
}
}
public类mvcapapplication:NinjectHttpApplication
{
//需要注入依赖项。
私有IBootStrapService引导服务;
Application Started()上受保护的覆盖无效
{
//用于在新应用程序启动时设置数据库中的用户角色等数据。
bootService.InitDatabase();
base.on应用程序启动();
RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
注册地址(RouteTable.Routes);
}
内部类SiteModule:NinjectModule
{
公共覆盖无效负载()
{
//我在这里设置绑定。
绑定()到();
将()绑定到()上
.带有构造函数参数(“连接字符串名称”、“MyDb”);
}
}
}
那么,如何让ninject在应用程序启动中直接执行DI呢?如您所见,我在
SiteModule
类中设置了绑定。您可以覆盖CreateKernel
方法,在该方法中注册模块:
protected override IKernel CreateKernel()
{
return new StandardKernel(
new INinjectModule[]
{
new SiteModule()
}
);
}
但这不会自动插入bootService
字段。您可以这样实例化它:
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
//Used to set data such as user roles in database on a new app start.
var bootService = Kernel.Get<IBootStrapService>();
bootService.InitDatabase();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
applicationstarted()上受保护的覆盖无效
{
base.on应用程序启动();
//用于在新应用程序启动时设置数据库中的用户角色等数据。
var bootService=Kernel.Get();
bootService.InitDatabase();
RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
注册地址(RouteTable.Routes);
}
那么在执行此操作之后,服务将在OnApplicationStarted中的代码执行之前被注入?@Lol coder,不,在这种情况下,bootService
不会自动注入,因为它是Http应用程序的一部分,Ninject无法控制它的实例化。您可以手动注入它。我会更新我的帖子来展示一个例子。