2

我有以下一组类型: IQueryProvider接口:

public interface IQueryProvider<TEntity, TEntityKey>

并添加了一个通用参数的实现:

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 回答