Не удается разрешить контроллер - PullRequest
1 голос
/ 22 декабря 2010

Ранее я не использовал интерфейс для своего общего хранилища.Когда я извлек интерфейс из моего общего репозитория, я добавил два конструктора: без параметров и параметризованные конструкторы. Я получаю следующую ошибку:

{"Resolution of the dependency failed, type = \"NascoBenefitBuilder.Controllers.ODSController\", name = \"(none)\".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type, ControllerLib.Models.Generic.IGenericRepository, is an interface and cannot be constructed. Are you missing a type mapping?
-----------------------------------------------
At the time of the exception, the container was:
Resolving NascoBenefitBuilder.Controllers.ODSController,(none)
Resolving parameter \"repo\" of constructor NascoBenefitBuilder.Controllers.ODSController(ControllerLib.Models.Generic.IGenericRepository repo)
Resolving ControllerLib.Models.Generic.IGenericRepository,(none)"}

Мой контроллер в начале:

public class ODSController : ControllerBase
{   
    IGenericRepository _generic = new GenericRepository();
}

После извлечения интерфейса и использования его в контроллере:

public class ODSController : ControllerBase
{
    IGenericRepository _generic;
    public ODSController() : this(new GenericRepository())
    {
    }

    public ODSController(IGenericRepository repo)
    {
        _generic = repo;
    }
}

Когда я использую параметризованный конструктор, выдает ошибку, упомянутую выше.

Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

2 голосов
/ 22 декабря 2010

Вам больше не нужен конструктор по умолчанию:

public class ODSController : ControllerBase
{
    private readonly IGenericRepository _repository;
    public ODSController(IGenericRepository repository)
    {
        _repository = repository;
    }
}

И затем убедитесь, что вы правильно сконфигурировали свой контейнер Unity:

IUnityContainer container = new UnityContainer()
    .RegisterType<IGenericRepository, GenericRepository>();

И что вы используете фабрику контроллеров Unity в Application_Start:

ControllerBuilder.Current.SetControllerFactory(typeof(UnityControllerFactory));
...