Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Ninject从OnApplicationStarted注入依赖项_Asp.net Mvc_Asp.net Mvc 3_Ninject - Fatal编程技术网

Asp.net mvc Ninject从OnApplicationStarted注入依赖项

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

我正在使用从我的Global.ascx.cs文件中启动的OnApplication中的服务。有没有一种方法可以从那里注入存储库

我的代码:

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无法控制它的实例化。您可以手动注入它。我会更新我的帖子来展示一个例子。