利用できるアプローチの 1 つは、サービス クラスにリポジトリ ファクトリを挿入し、ファクトリからリポジトリを呼び出す/取得することです。
リポジトリ ファクトリ:
public interface IRepositoryFactory
{
IRepositoryOne GetRepositoryOne();
IRepositoryTwo GetRepositoryTwo();
}
public class RepositoryFactory: IRepositoryFactory
{
public DataAccess.RepositoryInterfaces.IRepositoryOne GetRepositoryOne()
{
return new RepositoryOne();
}
public DataAccess.RepositoryInterfaces.IRepositoryTwo GetRepositoryTwo()
{
return new RepositoryTwo();
}
}
サービス クラス:
public ServiceClass: IService
{
private readonly IRepositoryFactory _repositoryFactory;
public ServiceClass(IRepositoryFactory factory)
{
_repositoryFactory = factory;
}
public IList<YourItems> GetYourItems()
{
var repository = _repositoryFactory.GetRepositoryOne();
return repository.GetItems(....);
}
}
このアプローチでは、個々のリポジトリすべてではなく、リポジトリ ファクトリのみを登録して解決する必要があります。これは一種のハイブリッドなアプローチですが、非常にクリーンで理解しやすいと思います。もちろん、常にファクトリを使用して、すべての呼び出しでリポジトリを解決できるわけではありません。もしよろしければ、そのサンプルもお見せします。