从服务层删除DAL依赖关系

时间:2017-04-05 09:03:50

标签: c# .net visual-studio

使用C#n层应用程序,我们有一个项目,我们试图从服务层中删除DAL的依赖关系。我们从项目中获取了using语句引用以及project.json的引用。

现在我们的服务层中有以下内容......

var stockItem= await _unitOfWork.StockRepo.FindOne(p => p.product == product && p.warehouse == warehouse).FirstOrDefaultAsync();

这正是我们追求的事情。问题是当我们将鼠标悬停在var stockItem上时,工具提示声明DAL.entities.Stock,因此我们仍然有一个依赖项。 这是否意味着我们的服务层仍然知道我们的DAL。任何人都知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您必须将服务层和DAL结合在一起。但是你可以将它分成不同的程序集。

ServiceLayer的定义Foo.Services.Core.dll

namespace Foo.Services.Core.Models
{
    public class Foo
    {
       ...
    }
}

namespace Foo.Services.Core.DataServices
{
    public interface IFooService
    {
        Task<Foo> GetByIdAsync( int id );
    } 
}

使用UnitOfWork Foo.Services.Impl.UnitOfWork.dll

,下一个项目将更加具体
namespace Foo.Services.Impl.UnitOfWork
{
    public class UnitOfWorkFooService : IFooService
    {
        private readonly IUnitOfWork _uow;
        public UnitOfWorkFooService( IUnitOfWork uow )
        { 
            _uow = uow;
        }

        public Task<Foo> GetByIdAsync( int id );
        {
            return await _uow.FooRepo.FindOne( ... ).FirstOrDefaultAsync();
        }
    }
}

或者将来与REST API Foo.Services.Impl.RestApi.dll

交谈可能完全不同
namespace Foo.Services.Impl.RestAPI
{
    public class RestApiFooService : IFooService
    {
        private readonly IRestApi _restapi;
        public RestApiFooService( IRestApi restapi )
        { 
            _restapi = restapi;
        }

        public Task<Foo> GetByIdAsync( int id );
        {
            return await _restapi.FooEndpoint.GetAsync( id );
        }
    }
}