【问题标题】:Using Unity 2 InjectionProperty with a abstract base controller in MVC在 MVC 中使用 Unity 2 InjectionProperty 和抽象基础控制器
【发布时间】:2011-06-01 18:51:02
【问题描述】:

我有以下基本控制器:

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 时,此设置将不起作用。我在从基本控制器继承的控制器中进行构造函数注入没有问题,但无法让属性注入在基本控制器中工作。有谁知道为什么?

【问题讨论】:

  • 这里与 Unity.MVC3 相同 - 可以在所有派生控制器上配置基本属性,但不能仅在一个基础上配置 DRY 解决方案。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多