我的一般問題是使用SimpleInjector來實現我的通用資源庫。使用通用資源庫實現簡單注入器
我有一個接口IRepository<T> where T : class
和一個實現接口的抽象類abstract class Repository<C, T> : IRepository<T> where T : class where C : DbContext
。最後,我有我的實體存儲庫,它繼承了抽象類。這裏有一個形而下例如:
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>
{
}
在我的Global.asax.cs文件,下的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