asp.Net Mvc 4 アプリをセットアップし、Onion Architectureパターンを使用して構成しようとしています。過去に、このような作業単位パターンを使用しました
public class UnitOfWork : IUnitOfWork, IDisposable
{
private IRepository<CallModel> _callRepo;
private IRepository<UserModel> _userRepo;
public IRepository<CallModel> CallRepo
{
get
{
if (_callRepo == null)
{
_callRepo = new Repository<CallModel>();
}
return _callRepo;
}
}
public IRepository<UserModel> UserRepo
{
get
{
if (_userRepo == null)
{
_userRepo = new Repository<UserModel>();
}
return _userRepo;
}
}
}
次に、UnitOfWork クラスのインスタンスをコントローラーに渡して、このような単純な CRUD を実行します。
public class QuestionsController : Controller
{
private IUnitOfWork _unitOfWork;
[Inject]
public QuestionsController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
アプリを 3 つのプロジェクトに分けました。
- 芯
- インフラストラクチャー
- ウェブ
Core プロジェクトにすべてのインターフェイスがあり、Infrastructure プロジェクトに IRepository インターフェイスの実装があります。UnitOfWork クラスをコア プロジェクトに配置すると、インフラストラクチャ プロジェクトで新しいリポジトリが必要になるため、コアからインフラストラクチャへの依存関係を作成します。これをインフラストラクチャに含めると、(コントローラを含む) Web プロジェクトはインフラストラクチャに依存し、ソリューション全体がオニオンではなくスパゲッティのように見えます。