在MVC中使用Unity 2 InjectionProperty和抽象基本控制器

时间:2010-12-30 22:08:34

标签: asp.net-mvc-2 unity-container

我有以下基本控制器:

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 :(得分:0)

我确实设法让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>