2010-12-30 16 views
3

で抽象ベースコントローラとユニティ2 InjectionPropertyを使用して:私のコントローラの工場は次のようになります私は、次のベースコントローラ持っMVC

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

::私はセットアップUnityへ次のコードを持って

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

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

AccountRepositoryをベースコントロールから継承するコントローラから使用しようとするとこの設定は機能しません。私はコントローラでコンストラクタインジェクションをベースコントローラから継承しても問題はありませんが、ベースコントローラで動作するようにプロパティインジェクションを取得することはできません。なぜ誰が知っていますか?

+0

Unity.MVC3と同じです - 派生したすべてのコントローラで基本プロパティを設定できますが、1つのベースのみでDRYソリューションは設定できません。 – StuartLC

答えて

0

私は基本的なControllerクラス(Unity.MVC3)で動作するSetter注入を取得できました。しかし、ベースに[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> 
関連する問題