2

私はエンティティのリストのリポジトリで作業していますが、同じクラスを複数回繰り返す必要があります。唯一の違いはタイプタイプです..それを汎用にする方法はありますか?

これを一般的にする方法がわからないので、非常に簡単なはずです。

 private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();

私がこれを繰り返しているクラス:

public class UserProfileRepository : IEntityRepository<IUserProfile>
{
   private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();

   public IUserProfile[] GetAll()
   {
     return _rep.GetAll();
   }

   public IUserProfile GetById(int id)
   {
     return _rep.GetById(id);
   }

   public IQueryable<IUserProfile> Query(Expression<Func<IUserProfile, bool>> filter)
   {
     return _rep.Query(filter);
   }
}
4

2 に答える 2

0

@NickBrayは頭に釘を打ちました。実際の具象リポジトリの実装がどれほど異なっているか類似しているかに関係なく、DAL例のクラスはインターフェイスを介してリポジトリインスタンスを公開する必要があります。

理想的には、公開されたインターフェースはこのように宣言されます。

interface IUserProfileRepository : IEntityRepository<IUserProfile>
{
}

IUserProfileこのようにして、必要に応じてカスタムメソッドを追加できます。IEntityRepositoryインターフェイスは、一般的なメソッド、、、AddおよびさまざまなメソッドUpdateを定義します。RemoveQueryXXX

于 2013-01-24T20:58:05.183 に答える
0

この例がお役に立てば幸いです。私があなたの質問を正しく理解したなら、あなたはインターフェース「IEntityRepository」に基づいてあなたのリポジトリを生成可能にしたいと思うでしょう。

次のようなものを試してください。


    public class UserProfileRepository<TUserProfile> : IEntityRepository<TUserProfile> where TUserProfile : IUserProfile
    {
       private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();

       public TUserProfile[] GetAll()
       {
         return _rep.GetAll();
       }

       public TUserProfile GetById(int id)
       {
         return _rep.GetById(id);
       }

       public IQueryable<TUserProfile> Query(Expression<Func<TUserProfile, bool>> filter)
       {
         return _rep.Query(filter);
       }
    }

于 2013-01-24T22:12:07.900 に答える