【发布时间】:2023-03-03 12:20:02
【问题描述】:
我使用的是asp.net的mvc 3框架,我创建了一个实现IControllerFactory接口的UnityControllerFactory:
...
public class UnityControllerFactory : IControllerFactory
{
private IUnityContainer _container;
private IControllerFactory _innerFactory;
public UnityControllerFactory(IUnityContainer container)
: this(container, new DefaultControllerFactory())
{
}
protected UnityControllerFactory(IUnityContainer container,
IControllerFactory innerFactory)
{
_container = container;
_innerFactory = innerFactory;
}
public IController CreateController(RequestContext requestContext,
string controllerName)
{
try
{
IController controller = _container.Resolve<IController>(controllerName.ToLowerInvariant);
return controller;
}
catch (Exception ex)
{
var msg = ex.Message;
return _innerFactory.CreateController(requestContext, controllerName);
}
}
...
在 Application_Start() 中,我有:
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
IUnityContainer container = GetUnityContainer();
container.RegisterType<IRepository<User>, LiveRepository<User>>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory(container));
...
}
我用家庭控制器对此进行了测试
public class HomeController : Controller{
IRepository<User> userRepo;
public HomeController(IRepository<User> userRepo)
{
this.userRepo = userRepo;
}
...
}
当我运行应用程序时,我根本无法构建家庭控制器。 在行中:
IController controller = _container.Resolve<IController>(controllerName.ToLowerInvariant);
我得到一个异常说:
**"解析依赖失败,type = "System.Web.Mvc.IController", name = “家庭控制器”。异常发生时:解决时。
异常是:InvalidOperationException - 当前类型 System.Web.Mvc.IController 是一个接口,无法构造。您是否缺少类型映射?
异常时,容器为:Resolving System.Web.Mvc.IController,homecontroller"**
但即使使用默认控制器工厂使用以下行:
_innerFactory.CreateController(requestContext, controllerName);
我仍然无法构建控制器,请帮助
【问题讨论】:
标签: asp.net asp.net-mvc-3 unity-container