【发布时间】:2016-07-14 15:04:50
【问题描述】:
我有一个使用存储库模式的 MVC 项目。我也将 Ninject 用于 IOC 容器。我在项目加载时存储一些缓存值时遇到问题。
在我的 Global.asax.cs 我有:
...(some settings)
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
....
...CustomDataCache.Configure();
在我的 ControllerFactory 中有我需要的绑定:
_ninjectKernal.Bind<IDataContext>().To<DataContext>()
.WithConstructorArgument("appNamekey", "Name of Data Application")
.WithConstructorArgument("serverLocationNameKey", "Location of Application Server");
在我的 CustomCache 类中,我想做类似的事情:
private IDataContext _context;
private CustomDataCache(IDataContext context)
{
_context = context;
}
public static void Configure(){
System.Web.HttpContext.Current.Cache["NDECCategories"] = _context.GetNdecCategories();
我想从全局静态调用 Configure(),但是当我需要 DataContext 的实例时,我该怎么做?
谢谢,
【问题讨论】:
-
请解释“我想静态调用 Configure()”...你想实现什么,为什么?你想让
Configure是一个静态方法,所以它可以在没有实例的情况下调用吗?如果是这样,Global.asax 似乎是设置上下文的错误方法。您的上下文也必须是静态的,因此静态值在您的所有用户之间共享——您将在每个用户的每个请求上覆盖上下文,但对于所有人。这似乎是错误的或浪费的。而且,在这种情况下,您不会从使用带静态的 IOC 中受益。
标签: c# asp.net-mvc static inversion-of-control