2014-10-20 57 views
-2

請幫助我更正此代碼。在接口中使用通用方法

我在班上

public interface IGenericSaveRepository 
{ 
    void Save<TEntity>(int id, ICollection<TEntity> entities) where TEntity : class; 
} 


public class GenericSaveRepository<TEntity> where TEntity : class,IGenericSaveRepository 
{ 
    private IUnitofWork<TEntity> _unitofWork; 
    private NaijaSchoolsContext _context; 
    public GenericSaveRepository(NaijaSchoolsContext context) 
    { 
     _context = context; 
     _unitofWork = new UnitofWork<TEntity>(_context); 
    } 
    public void Save(int id, ICollection<TEntity> entities) 
    { 
     foreach (var entity1 in entities) 
     { 
      //entity.Insert(entity1); 
      _unitofWork.Entity.Insert(entity1); 
     } 
    } 
} 


public class RatingRepo : GenericRepository<Rating> 
{ 
    private IGenericSaveRepository gen; 
    private readonly NaijaSchoolsContext _context; 
    public RatingRepo(NaijaSchoolsContext context) 
     : base(context) 
    { 
     _context = context; 

    } 

    public void Save(School school,Rating rating) 
    { 

     List<Rating> ratings = new List<Rating>(); 
     ratings.Add(rating); 
     gen = new GenericSaveRepository<Rating>(_context); 
     gen.Save(23, ratings); 
    } 
} 

此行gen = new GenericSaveRepository<Rating>(_context);不允許我有指定爲具體型別等級有編譯器錯誤。

我該怎麼做?

感謝您的幫助。

+0

確實評級實施IGenericSaveRepository? – 2014-10-20 11:30:36

+0

GenericRepository 和GenericSaveRepository 之間是否有區別或者是否是拼寫錯誤? 此外,評級的代碼缺失,請proivde。 – mindfxxxedCoder 2014-10-20 11:34:09

+0

不,它不執行它@ Selman22 – Seun 2014-10-20 11:35:15

回答

1

這應該刪除您的編譯錯誤..見將軍的實施,如果你不希望評級必須實現IGenericSaveRepository

public class RatingRepo : GenericRepository<Rating> 
     { 
      private GenericSaveRepository<Rating> gen; 
      private readonly NaijaSchoolsContext _context; 
      public RatingRepo(NaijaSchoolsContext context) 
       : base(context) 
      { 
       _context = context; 

      } 

      public void Save(School school, Rating rating) 
      { 

       List<Rating> ratings = new List<Rating>(); 
       ratings.Add(rating); 
       gen = new GenericSaveRepository<Rating>(_context); 
       gen.Save(23, ratings); 
      } 
     } 

更新:完成實施

public interface IGenericSaveRepository 
    { 
     void Save<TEntity>(int id, ICollection<TEntity> entities) where TEntity : class; 
    } 


    public class GenericSaveRepository<TEntity> where TEntity : class 
    { 
     private UnitofWork<TEntity> _unitofWork; 
     private NaijaSchoolsContext _context; 
     public GenericSaveRepository(NaijaSchoolsContext context) 
     { 
      _context = context; 
      _unitofWork = new UnitofWork<TEntity>(_context); 
     } 
     public void Save(int id, ICollection<TEntity> entities) 
     { 
      foreach (var entity1 in entities) 
      { 

      } 
     } 
    } 

    public class UnitofWork<T> 
    { 
     public UnitofWork(NaijaSchoolsContext context) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    internal interface IUnitofWork<T> 
    { 
    } 

    public class NaijaSchoolsContext 
    { 
    } 

    public class GenericRepository<T> 
    { 
     protected GenericRepository(NaijaSchoolsContext context) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public class Rating 
    { 
    } 

    public class School 
    { 
    } 
+0

您未在GenericSaveRepository類中實現IGenericSaveRepository。 Save方法需要具體實現在GenericSaveRepository類 – Seun 2014-10-20 11:43:42

+0

對不起然後你沒有選擇我親愛的朋友,但實施IGenericSaveRepository評級類.. – ThomasBecker 2014-10-20 11:45:43

+0

好的非常感謝 – Seun 2014-10-20 11:53:03

1

Rating必須執行IGenericSaveRepository爲了編譯。

public class GenericSaveRepository<TEntity>其中TEntity:類,IGenericSaveRepository

+0

我不希望Rating來實現IGenericSaveRepository。任何方式 – Seun 2014-10-20 11:34:16

+0

但你想這個:gen = new GenericSaveRepository (_context);編譯.. – 2014-10-20 11:35:24

+0

我認爲埃米爾答案的意圖丟失: 其中TEntity:類,IGenericSaveRepository 是錯誤的,它應該只是TEntity:類 順便說一下我儘量避免與只有「類」的定義做仿製藥,怎麼樣也許定義一個IEntity類型,例如提供關鍵字段,至少這是我在回購中經常需要的。那麼它也更加清楚,通用領域的真正含義是什麼。 – mindfxxxedCoder 2014-10-20 11:43:54