MVC3 ve Ninject ile bir web uygulaması başlatıyorum. Singleton olması gereken Global.asax dosyasında da ihtiyacım olan bir bağımlılık var.Global.asax'ta bağımlılık çıkarma
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();
}
Ama sonra MvcApplication_AuthenticateRequest
çağrıldığında _auth
boş olduğunu gördük:
Sonra böyle çalıştı:
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();
}
Ama şimdi yapıcı birkaç kez çağrıldığı görebilirsiniz nedenle birkaç iKernel olacak ve ben tekil örnekleri o kadar tekil olmayacağını tahmin benim uygulama kapsamımda.
Nasıl yapmalıyım? Statik bir değişken mi kullanıyorsunuz?
, her istekte DependencyResolver çağrısı yapan bir gerçeği öldürmez. – vtortola
Ben öyle düşünmüyorum, @Remo bana benden daha fazlasını anlatabiliyor olmalı, ancak denetleyicideki denetleyicimin çoğunda _authService enjekte ettiğimden muhtemelen aynı şeyi yapıyor ve "maliyet" değerine sahip ... – VinnyG
harika. Ben bu konu düzeltmek kadar yapacak. Bir milyona teşekkürler. – vtortola