Я использую инфраструктуру mvc 3 asp.net, я создал UnityControllerFactory, который реализует интерфейс IControllerFactory:
...
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 =
"HomeController". Исключение произошло во время: при разрешении.
Исключение: InvalidOperationException - Текущий тип, System.Web.Mvc.IController, является интерфейсом и не может быть создан. Вам не хватает отображения типов?
На момент исключения контейнер был: Resolving System.Web.Mvc.IController, homecontroller "**
, но даже с фабрикой контроллера по умолчанию, использующей строку:
_innerFactory.CreateController(requestContext, controllerName);
Я все еще не могу собрать контроллер, пожалуйста, помогите