[英]asp.net core 2.0 DI Injecting multiple classes of IInterface into a controller
[英]Use DI in asp.net core 2.0 for injecting BLL services
我有使用BLL
( Business Logic Layer
)的asp.net core 2.0 Web Api
項目。 當我嘗試在Controller
注入任何BLL
服務作為Dependancy
時,我收到錯誤。 我已經實現了以下Controller
:
namespace MyProject.WebApi.Controllers
{
[Route("api/test")]
public class TestController : Controller
{
private readonly ITestService _testService;
public TestController(ITestService testService)
{
_testService = testService;
}
[HttpGet, Route("get-all")]
public List<Test> Get()
{
return _testService.GetTestList();
}
}
}
我在BLL
(單獨的項目)中實現了測試服務:
namespace MyProject.Core
{
public class TestService : ITestService
{
private readonly ITestEngine _testEngine;
public TestService(ITestEngine testEngine)
{
_testEngine = testEngine;
}
public List<Test> GetTestList()
{
return _testEngine.GetTestList();
}
}
}
我的TestService
接口如下所示:
namespace MyProject.Core
{
public interface ITestService
{
List<Test> GetTestList();
}
}
build
successful
但是當我調用TestController
Get
方法時,我收到以下錯誤:
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[0]
An unhandled exception has occurred while executing the request
System.InvalidOperationException: Unable to resolve service for type 'MyProject.Infrastructure.Interface.ITestEngine' while attempting to activate 'MyProject.Core.TestService'.
有任何想法嗎?
默認情況下,DI容器不知道您的服務。 您需要在Startup.cs
中的ConfigureServices
方法中手動注冊它們,例如:
public void ConfigureServices(IServiceCollection services)
{
//Snip
services.AddScoped<ITestService, TestService>();
}
查看文檔以了解服務所需的生命周期(即作用域,單例或瞬態)
在Startup類中,您需要手動將所需的每個服務添加到DI容器中:
public void ConfigureServices(IServiceCollection services)
{
// your current code goes here
// ...
services.AddScoped<ITestService, TestService>();
}
如果您希望自動執行此操作,則需要添加更專業的容器(如Autofac或StructureMap)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.