Varsayılan olarak, numaralı ControllerContext.Controller
numaralı bir denetleyiciye ya da ViewContext.Context
numaralı bir görünümün içine erişebilirsiniz. Bir sınıftan erişebilmek için denetleyici örneğini bir yerde saklayan ve buradan oradan alabileceğiniz özel bir ControllerFactory
uygulamanız gerekir. Örn Request.Items
yılında:
public class MyControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext requestContext, string controllerName)
{
var controller = base.CreateController(requestContext, controllerName);
HttpContext.Current.Items["controllerInstance"] = controller;
return controller;
}
}
Sonra Application_Start
bunu kayıt:
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
Ve denetleyici örneği daha sonra alabilirsiniz:
public class SomeClass
{
public SomeClass()
{
var controller = (IController)HttpContext.Current.Items["controllerInstance"];
}
}
Ama bazı başka bir yol bulur denetleyici örneğini bu "hacky" geçici çözüm yerine sınıfıma iletmek için. ne yapıyorum bütün Asp.Net sayfa yaşam döngüsü/zararlı olup olmadığını
Nerede? Modelde mi? Bir görüşte? Tabii ki bir eylemdeyseniz, kontrol cihazınıza başvurmak için bunu kullanabilirsiniz, fakat sanırım bu durum böyle değil :). – BigMike
Bazı sınıflarda (bir eylemde değil, bir görünümde değil) – Alexandre
MVC modelinde bir Veri Modelinin yöntem akışında ya da bazı yardımcılarda bulunmadığınız sürece bir eylemde olmak zorundasınız. Sadece boş referanslardan kaçınmak için, kontrolör için sınıf metodunuza bir parametre ekleyeceğim ve akışın başladığı ve izlediği yeri izleyeceğim. – BigMike