当我尝试在区域中的控制器中打开视图时,我得到了上述内容. Ninject设置如下:
public class NinjectControllerFactory : DefaultControllerFactory { private IKernel kernel = new StandardKernel(new RLSBCWebSiteServices()); protected override IController GetControllerInstance(RequestContext context,Type controllerType) { if (controllerType == null) return null; return (IController)kernel.Get(controllerType); } private class MyWebSiteServices : NinjectModule { public override void Load() { Bind<IMatchesRepository>().To<SqlMatchesRepository>().WithConstructorArgument("connectionString",ConfigurationManager.ConnectionStrings["MyWebSiteDb"].ConnectionString); } } }
如果我在代码中放置断点,我看到RequestContext上下文包含以下值:
context.RouteData.DataTokens.Values[0] = “MyWebSite.WebUI.Areas.Visitor” context.RouteData.DataTokens.Values[1] = “Visitor” which is the Area context.RouteData.Values.Values[0] = “admin” which is the Controller context.RouteData.Values.Values[1] = “register” which is the View
但是,controllerType == null,而不是控制器名称.
这个转移到新页面的过程是由
Html.ActionLink("here","Register","Admin",new { area = "Visitor" },null)
在登录页面上.但是如果我进入就会发生同样的事情
http://example.com/Visitor/admin/register
进入IE8
地区登记如下:
public class VisitorAreaRegistration : AreaRegistration { public override string AreaName { get { return "Visitor"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Visitor_default","Visitor/{controller}/{action}/{id}",new { controller = "Admin",action = "Register",id = UrlParameter.Optional } ); } }
有没有人设法让区域使用NinjectControllerFactory,或者我的设置有问题?
解决方法
而不是创建自己的NinjectControllerFactory使用最新版本的Ninject.Web.Mvc.它支持区域.见:
https://github.com/ninject/ninject.web.mvc