Abp项目中的领域模型实体类访问仓储的方法

首先声明,不推荐使用这种方法。实体访问仓储是不被推荐的!

1.简单粗暴的方法

Abp.Dependency.IocManager.Instance.Resolve<IRepository<要访问的实体类>>();

2.绕个弯子的方法

  • 首先声明一个继承自IDomainService的接口并定义接口方法,例如ITestService
  • 添加接口实现类,在该构造函数中声明要访问的实体仓储相关参数
    public class TestService : ITestService
    {
        private IRepository<Role> roleRepository;

        public TestService(IRepository<Role> roleRepository)
        {
            this.roleRepository = roleRepository;
        }

        public bool CheckSomething()
        {
            var query = roleRepository.GetAll();
            ...
        }
    }

  • 在实体类方法中通过IoC获取领域服务
var svc = Abp.Dependency.IocManager.Instance.Resolve<ITestService>();
var pass = svc.CheckSomething();

Abp框架会自动为TestService实例注入相应的仓储变量,这个领域服务也可以直接在Application层中使用。

原文地址:https://www.cnblogs.com/wiseant/p/5520698.html