在我學習ASP.NET MVC 4應用程序中,我使用了存儲庫模式和服務層。項目中使用了實體框架和Autofac。我的數據類很簡單,幾乎所有的操作都是基本的CRUD操作。通用服務實現
我有一個抽象的倉庫基地:
public abstract class RepositoryBase<T> where T : class
這是爲實體樣本1樣本庫:
public class Sample1Repository : RepositoryBase<Sample1>, ISample1Repository
{
public Sample1Repository(IDatabaseFactory databaseFactory)
: base(databaseFactory)
{
}
}
public interface ISample1Repository : IRepository<Sample1>
{
}
這是我的控制器:
public class SampleController : Controller
{
private readonly ISampleService _sampleService;
public SampleController(ISampleService sampleService)
{
this._sampleService = sampleService;
}
}
而且,最後這是我的服務:
public interface ISampleService
{
IEnumerable<Sample1> GetSample1s();
Sample1 GetSample1(int id);
void CreateSample1(Sample1 item);
void DeleteSample1(int id);
void SaveSample1();
}
public class SampleService : ISampleService
{
private readonly ISample1Repository _sample1Repository;
private readonly IUnitOfWork _unitOfWork;
public SampleService(ISample1Repository sample1Repository, IUnitOfWork unitOfWork)
{
this._sample1Repository = sample1Repository;
this._unitOfWork = unitOfWork;
}
}
現在,我有以下問題:
1)我需要創建一個單獨的類爲每個實體存儲庫。 (即實體Sample2的另一個Sample2Repository)
2)我可以使用通用服務來執行這些CRUD任務嗎?
3)如果通用服務是可能的。我如何在Autofac bootstrapper中註冊它們?
我添加了'builder.RegisterGeneric(typeof(RepositoryBase <>))。(typeof(IRepository <>));'正如你所建議的,但是現在它會在'IContainer container = builder.Build();'上拋出一個錯誤「Sequence contains no matching element」 – SherleyDev 2013-02-28 19:36:05
@SherleyDev:這不是一個非常具有描述性的異常消息:-(。我不知道什麼是錯的,嘗試更新你的答案並添加這條消息的確切堆棧跟蹤。 – Steven 2013-02-28 20:04:04