ジェネリックリポジトリでSimpleInjectorを実装する際に問題があります。ジェネリックリポジトリで単純インジェクタを実装する
私は、インターフェイスIRepository<T> where T : class
と、インターフェイスを実装する抽象クラスabstract class Repository<C, T> : IRepository<T> where T : class where C : DbContext
を持っています。最後に抽象クラスを継承するエンティティリポジトリがあります。ここでconcret例です:私のglobal.asax.csファイルで
public interface IRepository<T> where T : class
{
IQueryable<T> GetAll();
IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
void Add(T entity);
void Remove(T entity);
}
public abstract class Repository<C, T> : IRepository<T>
where T : class where C : DbContext, new()
{
private C _context = new C();
public C Context
{
get { return _context; }
set { _context = value; }
}
public virtual IQueryable<T> GetAll()
{
IQueryable<T> query = _context.Set<T>();
return query;
}
...
}
public class PortalRepository : Repository<SequoiaEntities, Portal>
{
}
、のApplication_Start()関数の下で、私が追加しました:私は私のプロジェクトを起動すると
Container container = new Container();
container.Register<IRepository<Portal>, Repository<SequoiaEntities, Portal>>();
container.Verify();
、シンプルなインジェクタは、コンテナを検証しようとし
追加情報:指定されたタイプ
Repository<SequoiaEntities, Portal>
は具体的なタイプではありません。このタイプを登録するには、他のオーバーロードのいずれかを使用してください。
シンプルインジェクタを汎用クラスで実装する方法はありますか、特定のクラスを渡す必要がありますか?
あなたは抽象的でないタイプを登録する必要があり、しかし最後のもの:PortalRepository:* container.Register、PortalRepository>(); *抽象クラスの問題はインスタンス化できないことです。 –
3615
@ 3615あなたはそれを答えとして入れるべきです – Nkosi