使用Unity无法解析通用存储库

时间:2015-08-19 07:24:28

标签: c# generics dependency-injection unity-container

我正在使用存储库模式我的datacontext类如下,

public class DataContext : DbContext
{
    public DataContext()
    {

    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Customer>().ToTable("Customer");
        modelBuilder.Entity<Orders>().ToTable("Orders");
    }
    public IDbSet<T> DBSet<T>() where T : class
    {
        return this.Set<T>();
    }
}

我正在使用通用存储库,如下所示,

public interface IRepository<T> : IDisposable
{
    IQueryable<T> FindAll();
    T FindById(int id);
    int Add(T TEntity);
    int Update(T TEntity);
    int Delete(T TEntity);
    int Commit();
}

实施是,

public class SqlRepository<T> : IRepository<T> where T : class
{
    private DataContext _context;
    private readonly IDbSet<T> _dbSet;
    bool disposing;
    public SqlRepository()
    {
        _context = new DataContext();
        _dbSet = _context.DBSet<T>();
    }
    public IQueryable<T> FindAll()
    {
        return _dbSet;
    }

    public T FindById(int id)
    {
        return _dbSet.Find(id);
    }

我正在使用基于配置的容器,

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <assembly name="CustomerManagementAPI.Data"/>
  <namespace name="CustomerManagementAPI.Data"/>
  <container>
    <register type="IRepository" mapTo="SqlRepository">
      <lifetime type="singleton"/>
    </register>
    <register type="ICustomerService" mapTo="CustomerService">
      <lifetime type="singleton"/>
    </register>
  </container>
</unity>

尝试使用参数实例化控制器时出现以下错误 无法解析类型名称或别名IRepository。请检查您的配置文件并验证此类型名称。

1 个答案:

答案 0 :(得分:0)

将其注册为通用:

<register type="IRepository[]" mapTo="SqlRepository[]">
  <lifetime type="singleton"/>
</register>