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