Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
.net 要求内核在模块加载时创建单例作用域依赖项的实例_.net_Asp.net Mvc_Inversion Of Control_Ninject - Fatal编程技术网

.net 要求内核在模块加载时创建单例作用域依赖项的实例

.net 要求内核在模块加载时创建单例作用域依赖项的实例,.net,asp.net-mvc,inversion-of-control,ninject,.net,Asp.net Mvc,Inversion Of Control,Ninject,我的ASP.NET MVC 3应用程序使用Ninject IoC容器。其中一个控制器依赖于数据提供者,该提供者需要在网站启动时开始缓存可能需要的内容,而不是在根据请求创建控制器并且正确地需要数据时 为此,我需要让Ninject为我的依赖项创建一个singleton作用域实例,它将在SiteStart上为请求提供数据 我该怎么做 您需要将.InSingletonScope()添加到内核内部的映射中。这样,它将始终使用相同的对象。一旦需要该对象,Ninject将加载它,并在此后始终使用相同的对象。您

我的ASP.NET MVC 3应用程序使用Ninject IoC容器。其中一个控制器依赖于数据提供者,该提供者需要在网站启动时开始缓存可能需要的内容,而不是在根据请求创建控制器并且正确地需要数据时

为此,我需要让Ninject为我的依赖项创建一个singleton作用域实例,它将在SiteStart上为请求提供数据


我该怎么做

您需要将
.InSingletonScope()
添加到内核内部的映射中。这样,它将始终使用相同的对象。一旦需要该对象,Ninject将加载它,并在此后始终使用相同的对象。

您需要将
.InSingletonScope()
添加到内核内的映射中。这样,它将始终使用相同的对象。一旦需要对象,Ninject将加载它,并在此后始终使用相同的对象。

我只需在global.asax中对应用程序启动执行NinjectHttpApplication提供的覆盖操作。如果在global.asax中使用常规HttpApplication(无NinjectHttpApplication覆盖),则只需使用常规HttpApplication_Start事件初始化缓存即可。在这个上下文中触摸IoC容器是可以接受的,因为它是应用程序的复合根。所以我猜是这样的:

Bind<IProvider>().To<CacheProvider>().InSingletonScope(); //<in binding module

Kernel.Get<IProvider>().SetupCache() //<in global.asax

Bind().To().InSingletonScope()// 我只需要在global.asax中对应用程序启动的覆盖执行NinjectHttpApplication提供的任何操作。如果在global.asax中使用常规HttpApplication(无NinjectHttpApplication覆盖),则只需使用常规HttpApplication_Start事件初始化缓存即可。在这个上下文中触摸IoC容器是可以接受的,因为它是应用程序的复合根。所以我猜是这样的:

Bind<IProvider>().To<CacheProvider>().InSingletonScope(); //<in binding module

Kernel.Get<IProvider>().SetupCache() //<in global.asax

Bind().To().InSingletonScope()//谢谢,但我已经明确提到,我需要知道如何在站点启动时初始化依赖项。我知道如何创建单例范围的依赖项。现在我只是在Global.asax中调用一个
dependencysolver.Current.GetService
。然后,是的,你需要调用加载这个,这就是我说的在需要时加载对象的意思。如果您没有使用它,那么就没有必要实例化它。谢谢,但我已经明确提到,我需要知道如何在站点启动时初始化依赖项。我知道如何创建单例范围的依赖项。现在我只是在Global.asax中调用一个
dependencysolver.Current.GetService
。然后,是的,你需要调用加载这个,这就是我说的在需要时加载对象的意思。如果您没有使用它,那么就没有必要以其他方式实例化它。