C# でインターフェイスを適切に管理する方法がわかりません。私の目標は、さまざまな DAL リポジトリ メソッドを呼び出すいくつかの一般的なメソッド (Save()、Dispose() など) を持つビジネス レイヤー サービスの抽象クラスを作成することです。すべてのサービスで次のようなことを繰り返さないようにしたい:
public Save()
{
repository.Save();
}
私はそれに似たシナリオを持っています:
インターフェース
namespace Common
{
public interface IRepository
{
void Save;
void Dispose;
}
}
ダル
namespace DAL
{
public Repository : IRepository
{
public void Save() {};
public void Dispose() {};
public void Add() {}
}
}
BL
namespace BL
{
public abstrac BaseService
{
protected IRepository repository;
protected BaseService(IRepository repo)
{
repository = repo;
}
public Save()
{
repository.Save();
}
}
//...
//Tentative 1
public Service : BaseService
{
private Repository rep;
public Service()
: base(new DAL.Repository())
{
rep = base.repository; // ERROR: cannot convert IRepository to Repository
}
}
}
私もこれを試しました:
//Tentative 2
public Service : BaseService
{
private IRepository rep;
public Service()
: base(new DAL.Repository())
{
rep = base.repository; // OK
}
public void Add()
{
rep.Add() // ERROR: IRepository doesn't contain a definition for 'Add'
}
}
使用したいすべてのメソッドをインターフェイスで定義できることはわかっていますが、ジェネリック型に関する多くの問題を管理する必要があります。私の質問から理解できるはずですが、私は C# の初心者であり、少なくとも私がより専門的になるまでは、複雑さを避けたいと思います:)