1

我正在使用asp.net 样板来创建新项目。

我已将新服务定义如下:

public class Employee : Entity<int>
{
    public string FName { get; set; }
    public string LName { get; set; }
}

public interface IEmployeeAppService : IApplicationService
{
    Employee AddEmployee(Employee emp);
    List<Employee> GetAll();
}

public class EmployeeAppService : MyTestProjectAppServiceBase, IEmployeeAppService
{
    private IRepository<Employee, int> _employeeRepository;

    public EmployeeAppService(IRepository<Employee, int> repo)
    {
        _employeeRepository = repo;
    }

    public Employee AddEmployee(Employee emp)
    {
        return _employeeRepository.Insert(emp);
    }

    public List<Employee> GetAll()
    {
        return _employeeRepository.GetAllList();
    } 
}

我想在 HomeController 中使用该服务:

public class HomeController : MyTestProjectControllerBase
{
    IEmployeeAppService service;

    public HomeController(IEmployeeAppService svc)
    {
        service = svc;
    }
}

当我运行应用程序时,出现以下错误:

无法创建组件“MyTestProject.Services.EmployeeAppService”,因为它需要满足依赖关系。

'MyTestProject.Services.EmployeeAppService' 正在等待以下依赖项:
- 服务'Abp.Domain.Repositories.IRepository`2[[MyTestProject.Domain.Employee, MyTestProject.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken= null],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 未注册。

如何注册EmployeeAppService依赖项HomeController

更新

我尝试了以下代码

IocManager.Register(typeof(IRepository<Employee, int>),
                    typeof(EmployeeAppService),
                    Abp.Dependency.DependencyLifeStyle.Transient);

但随后它显示此错误

已经有一个具有该名称的组件。您是否想修改现有组件?如果不是,请确保指定一个唯一名称。

4

2 回答 2

9

这通常发生在 DbContext 中未指定您的实体(在本例中为员工)时。

只需将以下属性添加到您的 DbContext 类中,您就可以开始使用了:

public virtual IDbSet<Employee> Employees { get; set; }

于 2017-05-26T09:53:27.673 回答
1

您无需手动注册应用服务。删除代码 IocManager.Register ...

当您基于 IApplicationService 时,它​​会自动注册到 DI。

错误说 EmployeeAppService 无法解决。所以就像Jacques Snyman所说,将 Employee 实体添加到 DbContext。

于 2017-06-21T05:38:59.963 回答