2012-10-25 52 views
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,例如可能需要另一個上下文 任何幫助表示讚賞

+0

請標記與正在使用的語言這個問題。它是[tag:.net]嗎? – Bohemian

+0

是的,它是C#,.Net 4.5 – Skog

回答

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>