簡體   English   中英

在asp.net core 2.0中使用DI來注入BLL服務

[英]Use DI in asp.net core 2.0 for injecting BLL services

我有使用BLLBusiness 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM