我对Ninject以及DI一般都很陌生。我使用NHibernate作为我的MVC应用程序的ORM,并对我的结果非常满意。也就是说,直到我从Ninject 2.1升级到2.2。如何不使用Ninject的内核作为资源定位器
现在,由于使用Ninject的内核作为资源定位器,我在我的NinjectWebsiteApplication类中出现错误。
实施例:
void NinjectWebsiteApplication_BeginRequest(object sender, System.EventArgs e)
{
ILogger logger = Kernel.Get<ILogger>();
logger.Debug(“**********REQUEST BEGIN****************”);
logger.Debug(“**** URL = ” + Request.Url.AbsolutePath);
}
实施例2:
protected override void OnApplicationStarted()
{
var bootstrapper = Kernel.Get<Bootstrapper>();
bootstrapper.RegisterAllAreas();
AreaRegistration.RegisterAllAreas();
......
(More stuff here, like AutoMapper mappings, etc.)
......
}
*的Bootstrapper
类是我创建了一个类,其中注册我路线,全局过滤器等
在这两种上述示例中,我收到有关Kernel.Get()
函数的警告,其中声明以下内容:
“Ninject.Web.Mvc.NinjectHttpApplication.Kernel”已过时:“不要使用Ninject的服务定位器”
在此进行了一系列的搜索后,普遍的共识是,这是真的。
我正在努力解决这个问题,但是在做些什么的时候会有点不知所措。
我加载了最新的Ninject.Web.Mvc NuGet包,它在App_Start文件夹下创建NinjectMVC3静态类。我发现他们引用Microsoft.Web.Infrastructure.DynamicModuleHelper
,但我没有看到哪些内容符合我想要做的。
如果有人有任何提示,可以帮助我解决我的小混乱,我将不胜感激!
感谢您的详细解释!我明白理解日志操作过滤器如何适用于开始请求,但结束请求又如何?例如,我有以下(也处理我的IUnitOfWork): void NinjectWebsiteApplication_EndRequest(object sender,System.EventArgs e){ILOGger logger = Kernel。获取(); IUnitOfWork uow = Kernel.Get (); uow.Displose(); logger.Debug(“************ REQUEST END ************”); } –
hiro77
@JoelHulen,你只需在自定义操作过滤器中覆盖OnActionExecuted或OnResultExecuted方法,就像我展示OnActionExecuting方法一样,这取决于你想要在哪里处理你的工作单元:该操作已完成执行或视图已完成呈现。另外,如果你要处置你的UoF,你可能不应该调用LogActionFilterAttribute属性。你可以创建另一个进行处理。 –
它完美地工作。谢谢!在你看来,就处置UoW而言,是否存在一个优先处理OnAction执行OnResultExecuted?另外,您是否知道控制器操作“退出”全局过滤器属性的方法? – hiro77