在Aspnet核心样板框架上工作困在一个问题上,形成我的控制器无法调用服务。
应用程序类库包含IEmployeeService和EmployeeService,如何从我的EmployeeController中调用它们。
服务
public interface IEmployeeService
{
int CreateEmployee(CreateEmployeeDto data);
IEnumerable<EmployeeListDto> GetEmployeeList();
}
public class EmployeeService : IEmployeeService
{
}
调节器
[AbpMvcAuthorize]
public class EmployeeController : HRISControllerBase
{
private readonly IEmployeeService _employeeService;
public EmployeeController(
IEmployeeService employeeService
)
{
_employeeService = employeeService;
}
public ActionResult Index()
{
return View();
}
}
注意:项目是否需要在Startup.cs文件中的ConfigureServices中配置某些内容。
根据docs
“ASP.NET Boilerplate自动注册所有存储库,域服务,应用程序服务”
因此,您需要做的就是将IEmployeeService更改为从IApplicationService继承:
public interface IEmployeeService : IApplicationService
{
int CreateEmployee(CreateEmployeeDto data);
IEnumerable<EmployeeListDto> GetEmployeeList();
}
您需要在ConfigureServices
方法中注册它:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IEmployeeService, EmployeeService>();
}
实施ITransientDependency
。
public class EmployeeService : IEmployeeService, ITransientDependency
{
// ...
}
来自https://aspnetboilerplate.com/Pages/Documents/Dependency-Injection#helper-interfaces:
ASP.NET Boilerplate提供ITransientDependency,IPerWebRequestDependency和ISingletonDependency接口作为快捷方式。
您可以在Startup.cs类中使用已注册的类。其中asp..net核心提供了内置DI。