Unity解析c#

时间:2017-03-17 09:31:26

标签: c# unity-container

我在我的应用程序中遇到了一个问题:

public interface IOrderServiceTest1 : IEntityBaseRepository<Order>
{
}

public class OrderServiceTest1 : IOrderServiceTest1
{
}

在我的网络Api配置类中,我尝试解决此问题:

var container = new UnityContainer();
container.RegisterType(typeof(IEntityBaseRepository<>), typeof(EntityBaseRepository<>));
container.RegisterType<IOrderServiceTest1, OrderServiceTest1>(new HierarchicalLifetimeManager());

然后当我尝试解决错误时出现:

IOrderServiceTest1 myServiceInstance = container.Resolve<IOrderServiceTest1>();
  

在解析时发生异常。

     

异常是:InvalidOperationException - 当前类型,.... Data.Repositories.EntityBaseRepository`1 [... Entities.Order],是一个抽象类,无法构造。你错过了类型映射吗?

这里是IEntityBaseRepository:

    public interface IEntityBaseRepository<T> where T : class, IEntityBase, new()
{
    IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties);
    IQueryable<T> All { get; }
    IQueryable<T> GetAll();
    T GetSingle(int id);
    IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
    void Add(T entity);
    void Delete(T entity);
    void Edit(T entity);
}

我可以帮助解决这类问题吗?

THX

1 个答案:

答案 0 :(得分:0)

首先,消息说你用抽象类IEntityBaseRepository解析你的接口EntityBaseRepository,你不能这样做,因为抽象类不能被构造,声明子类并创建它们的实例。 第二,为什么会出现此错误,因为您解析了接口及其基本接口,因此它会查看您的继承链,并首先解析您的基本接口。