到目前为止,我的服务逻辑看起来像这样
Mapper.CreateMap<FooBarRecord, FooBarVm>().ForAllMembers(opt => opt.Ignore());
Mapper.CreateMap<FooBarRecord, FooBarVm>()
.ForMember(s => s.bar, m => m.MapFrom(rec => rec.bar))
//other columns - those are OK
;
通过这种设计我遇到了问题。我的项目有MVC和Web Api控制器,因为我必须为web api和mvc请求创建不同的容器,我无法确定要使用哪个容器。所以我决定应该摆脱存储库工厂并注入存储库,但我不想立即创建public class MyService : IMyService
{
private readonly IDataRepositoryFactory _repositoryFactory;
private readonly IUnitOfWork _unitOfWork;
public MyService (IDataRepositoryFactory repositoryFactory, IUnitOfWork unitOfWork)
{
_repositoryFactory = repositoryFactory;
_unitOfWork = unitOfWork;
}
public object JustDoIt(string someValue)
{
var repo1 = _repositoryFactory.GetDataRepository<IMyRepository1>();
var result = repo1.GetSomething(someValue);
if (result == null)
{
var repo2 = _repositoryFactory.GetDataRepository<IMyRepository2>();
var result = repo2.GetSomething(someValue);
}
return result;
}
}
,因为我可能不需要它。
所以也许你对我应该做些什么有一些建议。
答案 0 :(得分:0)
这个概念称为延迟加载,可以使用Lazy类来实现。您可以注入一个Lazy对象,而不是注入存储库,只要在Lazy对象上调用Value属性,就可以构建接口。
您可以删除工厂并注入可能需要的所有存储库。
public class MyService : IMyService {
private readonly Lazy<IRepository> _repo;
public MyService(Lazy<IRepository> repo) {
_repo = repo;
}
public void Act(...) {
_repo.Value.Save(..);
}
}