В простом приложении mvc 4 я установил пакет Ninject.MVC3 nuget.Найти, если запрос является дочерним действием, до того, как доступен контекст контроллера
Это мой контроллер, очень простой, ISomeClass инжектируется в конструкторе по ninject.
public class HomeController : Controller
{
private readonly ISomeClass _someClass;
public HomeController(ISomeClass someclass)
{
_someClass = someclass;
}
public ActionResult Index()
{
return View();
}
[ChildActionOnly]
public PartialViewResult MiniView()
{
return PartialView("miniview", _someClass.GetName());
}
}
Это SomeClass
public class SomeClass : ISomeClass
{
private readonly string _someName;
public SomeClass(string someName)
{
_someName = someName;
}
public string GetName()
{
return _someName;
}
}
В представлении Index.cshtml У меня есть
@{ Html.RenderAction("MiniView","Home"); }
Сейчас в NinjectWebCommon, когда я иду, чтобы зарегистрировать услугу, мне нужно знать, если запрос был запрос на действие ребенка или нет. Например, когда я звоню Html.RenderAction
. Это то, что я пытаюсь, но он не работает.
kernel.Bind<ISomeClass>().To<SomeClass>()
.WithConstructorArgument("someName", c => IsChildAction(c) ? "Child" : "Nope");
Метод IsChildAction - всегда возвращает false.
private static bool IsChildAction(Ninject.Activation.IContext c)
{
var handler = HttpContext.Current.Handler;
/*Cant do this, ChildActionMvcHandler is internal*/
return handler is System.Web.Mvc.Html.ChildActionExtensions.ChildActionMvcHandler;
//OR
//This is how ControllerContext.IsChildAction gets its value in System.Web.Mvc but
//RouteData.DataTokens is empty for me
return ((MvcHandler)handler).RequestContext.RouteData.DataTokens
.ContainsKey("ParentActionViewContext");
}
Любые идеи, если это можно сделать?
ps: это не настоящий код, просто что-то пытается. Разве это то, что я определенно не должен делать? Зачем?
(HttpContext.Current.PreviousHandler as MvcHandler)! = Null –