2

私は次のタイプのセットを持っています: IQueryProviderインターフェース:

public interface IQueryProvider<TEntity, TEntityKey>

そして、1つのジェネリックパラメーターが追加された実装:

public class EFQueryProvider<TContext, TEntity, TEntityKey> : IQueryProvider<TEntity, TEntityKey>.

さらに、汎用QueryProviderをカプセル化する具象リポジトリがあります。例えば:

UserRepository : IUserRepository
{
   private IQueryProvider<User, int> _provider;

   public UserRepository(IQueryProvider<User, int> provider)
   {
       _provider = provider;
   }
}

Unity構成を使用してコンストラクターパラメーターを解決しようとしています:

<register type="IUserRepository" mapTo="ConcreteUserRepository">
  <constructor>
     <param ... What should be here??? />
  <constructor>
</register>

閉じたジェネリック型のインスタンスをコンストラクターに渡すにはどうすればよいですか(インスタンスがEFQueryProvider<MySampleContext, User, int>コンストラクターに渡されるようにするには、リポジトリ登録ごとにこれを行う必要があります。たとえば、ArticlesRepositoryには別のコンテキストが必要になる可能性があります。助けていただければ幸いです。

4

1 に答える 1

3

自分で解決策を見つけました。構成は次のようになります。

<register name="myQueryProvider" type="MyLib.IQueryProvider[[User, MyEntityLib], int], MyAnotherLib" mapTo="MyLib.EFQueryProvider[[MyContext, MyEFLib], [User, MyEntityLib], int], MyEFLib" />

およびリポジトリ登録:

<register type="IUserRepository" mapTo="UserRepository">
        <constructor>
          <param name="queryProvider">
            <dependency name="myQueryProvider" />
          </param>
        </constructor>
      </register>
于 2012-10-25T20:24:10.393 に答える