У меня есть такой репозиторий
public abstract class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : class
{
protected DbContext _dbContext;
public BaseRepository(DbContext dbContext)
{
_dbContext = dbContext;
}
public TEntity GetByKey(object keyValue)
{
// todo
}
}
и конкретное хранилище вроде этого
public CustomerRepository : BaseRepository<Customer> , ICustomerRepository
{
public CustomerRepository(DbContext context) : base (context) { }
public Customer FindCustomerByKey(string key)
{
_dbContext.Set<Customer>().Find(key);
}
}
У меня есть такой сервис wcf
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class CustomerSatisfactionService : ICustomerSatisfactionService
{
private ICustomerRepository _customerRepository;
private IHelpDeskRepository _helpdeskRepository;
public AccountService(ICustomerRepository customerRepository,IHelpdeskRepository helpdeskRepository)
{
_customerRepository = customerRepository;
_helpdeskRepository = helpdeskRepository;
}
public void DoSomethingUsingBothRepositories()
{
// start unit of work
// _customerRepository.DoSomething();
// _helpdeskRepository.DoSomething();
// commit unit of work
}
}
и я использую StructureMap для внедрения таких экземпляров DbContext, как этот
For<DbContext>().Use(() => new MyApplicationContext());
Моя проблема в том, что когда клиент вызывает службу, создается новый экземпляр CustomerSatisfactionService
, следовательно, создаются новые экземпляры CustomerRepository
и HelpdeskRepository
, но с разными DbContexts.
Я хочу реализовать шаблон единицы работы, но в методе DoSomethingWithBothRepositories
два хранилища имеют разные DbContexts.
Есть ли какой-нибудь способ указать структуре карты ускорить работу экземпляра DbContext для каждого вызова?