Я запускаю веб-приложение с MVC3 и Ninject.Есть одна зависимость, которая мне также нужна в файле Global.asax, который должен быть одноэлементным.
Я думал, что это должно быть так:
public class MvcApplication : NinjectHttpApplication
{
IUserAuthentication _auth;
public MvcApplication()
{
base.AuthenticateRequest += new EventHandler(MvcApplication_AuthenticateRequest);
}
protected override IKernel CreateKernel()
{
var _kernel = new StandardKernel(new SecurityModule());
_auth = _kernel.Get<IUserAuthentication>();
return _kernel;
}
void MvcApplication_AuthenticateRequest(object sender, EventArgs e)
{
_auth.ToString();
}
Но потом я увидел, что _auth
равно нулю, когда вызывается MvcApplication_AuthenticateRequest
.
Тогда я попытался так:
public class MvcApplication : NinjectHttpApplication
{
ItUserAuthentication _auth;
IKernel _kernel;
public MvcApplication()
{
_kernel = new StandardKernel(new SecurityModule());
_auth = _kernel.Get<IUserAuthentication>();
base.AuthenticateRequest += new EventHandler(MvcApplication_AuthenticateRequest);
}
protected override IKernel CreateKernel()
{
return _kernel;
}
void MvcApplication_AuthenticateRequest(object sender, EventArgs e)
{
_auth.ToString();
}
Но теперь я вижу, что конструктор вызывается несколько раз, поэтому я буду иметьнесколько IKernel, и я думаю, что одиночные экземпляры не будут такими одиночными в моей области приложения.
Как мне это сделать?Используя статическую переменную?