Использование Unity 2 InjectionProperty с абстрактным базовым контроллером в MVC - PullRequest
3 голосов
/ 31 декабря 2010

У меня есть следующий базовый контроллер:

public abstract class BaseController : Controller
{
    public IFormsAuthentication FormsAuthentication { get; set; }
    public IAccountRepository AccountRepository { get; set; }
}

У меня есть следующий код для настройки Unity:

.RegisterType<BaseController>(new InjectionProperty[]
    {
        new InjectionProperty("FormsAuthentication", new ResolvedParameter<IFormsAuthentication>()),
        new InjectionProperty("AccountRepository", new ResolvedParameter<IAccountRepository>())
    });

Моя фабрика контроллеров выглядит так:

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
    return (controllerType == null) ? base.GetControllerInstance(requestContext, controllerType) : container.Resolve<IController>(controllerType);
}

Когда я пытаюсь использовать AccountRepository от контроллера, унаследованного от базового контроллера, эта настройка не будет работать. У меня нет проблем с внедрением конструктора в контроллере, наследуемом от базового контроллера, но я не могу заставить внедрение свойства работать в базовом контроллере. Кто-нибудь знает почему?

1 Ответ

0 голосов
/ 07 марта 2012

Мне удалось заставить инжектор Setter работать с базовым классом Controller (с Unity.MVC3).Однако мне нужно было явно указать атрибут [Microsoft.Practices.Unity.Dependency] на базе.

Базовый контроллер:

    [Dependency]
    public IMyServiceDependency MyServiceDependency
    {
        get;
        set;
    }

В конфигурации не было ничего особенного.

            <register
 type="Project.NameSpace.Interfaces.IMyServiceDependency, Project.NameSpace.Assembly"
 mapTo="Project.NameSpace.MyServiceDependency, Project.NameSpace.Assembly">
            </register>
...