1

私はControllerのMVCアプリを持っています。これはIDomainServiceです。 DomainServiceクラスのコンストラクタはIRepository で、Repositoryクラスのコンストラクタには接続文字列が必要です。UnityContainer - 依存関係を登録/解決する方法

string connectionString = ConfigurationManager 
    .ConnectionStrings["ApplicationServices"].ConnectionString; 

c.RegisterInstance("ConnectionString", connectionString); 

c.RegisterType<IDepartmentRepository, DepartmentRepository>(
    "DepartmentRepository", 
    new InjectionConstructor(connectionString)); 

c.RegisterType<IDepartmentDomainService, DepartmentService>(
    new InjectionConstructor(
     new ResolvedParameter<IDepartmentRepository>(
      "DepartmentRepository"))); 

しかし、これは動作しません:

私はこのような何かを持っています。

私は何か間違っていますか?私はリポジトリの注入に問題はありませんが、(リポジトリを使って)ドメインサービスを注入することはできません。

ありがとうございました。

答えて

6

私は通常、このための小さなクラスを追加します。あなたがする必要がない場合

public class AppConfigConnectionFactory : IConnectionFactory 
{ 
    public IDbConnection Create() 
    { 
     return new SqlConnection(ConfigurationManager 
      .ConnectionStrings["ApplicationServices"].ConnectionString); 
    } 
} 

c.RegisterType<IConnectionFactory, AppConfigConnectionFactory>(); 
c.RegisterType<IDepartmentRepository, DepartmentRepository>(); 

は、文字列に依存しないでください。また、このソリューションでは、各リポジトリでコードの重複を避けることもできます。

+0

これは魅力的です。 – Raymond

+0

私はあなたのアプローチが好きです。とても清潔です。 +1。 – Steven

関連する問題