2017-04-05 8 views
0

からDAL依存関係を削除するには、C#n層アプリケーションを使用して、サービスレイヤからDALの依存関係を削除しようとしているプロジェクトがあります。私たちは、project.jsonからの参照とともに、usingステートメントリファレンスをプロジェクトから取り出しました。サービス層

今、私たちは、これはまさに私たちが後にあるものの一種である私達のサービス層で、次のようなもの...

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

を持っています。問題は、私たちがまだ依存関係を持っているので、ツールチップがDAL.entities.StockをvarStockItItemにホバーするときです。 これは、私たちのサービス層がまだDALについて知っていることを意味します。誰もがこの問題を取り除く方法を考えている。

+0

エンティティを抽出することができます別のプロジェクトに – Simon

+0

サービス層でデータ層が使用されています。だからあなたのサービス層はこのリファレンスの一部としてエンティティについて知っているでしょう。前述のようにエンティティを別のプロジェクトに移動しない限り、これは非常に一般的です。 – Ric

+0

サービス層はエンティティについて知っている必要がありますが、残りのデータ層については知りません。 – Simon

答えて

1

サービスレイヤと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); 
     } 
    } 
} 
関連する問題