使用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。任何人都知道如何解决这个问题。
答案 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 );
}
}
}