我想知道是否可以使用C#/ ASP.NET將模型類型映射到存儲庫類型。正如你所看到的,我試圖實現工作模式庫/工作單元。實現示例如下:ASP.NET地圖模型類型爲存儲庫類型?
public class UnitOfWork : IDisposable
{
private SchoolContext context = new SchoolContext();
private DepartmentRepository departmentRepository;
private CourseRepository courseRepository;
public DepartmentRepository DepartmentRepository
{
get
{
if (this.departmentRepository == null)
{
this.departmentRepository = new DepartmentRepository(context);
}
return departmentRepository;
}
}
public CourseRepository CourseRepository
{
get
{
if (this.courseRepository == null)
{
this.courseRepository = new CourseRepository(context);
}
return courseRepository;
}
}
但是,由於它有一個問題,那的UnitOfWork需要保持性能一長串每個倉庫類型。在這個例子中,它不是很糟糕,因爲只有兩個實體類型(部門,課程)和兩個相應的存儲庫(部署庫和課程存儲庫)。但隨着應用程序規模的增長,UnitOfWork類很快變得龐大而混亂,數十甚至數百個屬性,它將成爲上帝之類的東西。
我想要的是更通用的東西,比如將模型類型映射到存儲庫對象的通用方法GetRepository()。下面的僞代碼演示了我想要的:
// definition
public TRepository GetRepository<TModel>(){ // pending implementation }
// use-case
var departmentRepository = UnitOfWork.GetRepository<TModel>();
那麼我該如何編寫這樣的代碼,將模型類型映射到存儲庫對象?恐怕AutoMapper不能工作,因爲它只映射具體實現,而不是泛型類型。你怎麼看?當條件不是將每個存儲庫實現硬編碼爲工作單元中的屬性時,如何處理此問題?
從UnitOfWork中刪除存儲庫。將UoW注入存儲庫並從Context獲取實體集。 – Jasen
看起來有點像依賴注入和控制反轉的工作。您可以在您的IOC引導程序中註冊所有模型和相應的存儲庫關聯... – Theo
您可以編寫自己的映射器來解決此問題 –