Это может быть странным случаем, но я хочу иногда использовать один и тот же экземпляр при получении экспорта с помощью MEF, а иногда создавать новый.
В основном у меня есть класс обслуживания WCF, который является экземпляром на вызов. Каждый экземпляр импортирует RepositoryFactory, который также будет новым экземпляром для каждого класса обслуживания. Я возвращаю хранилище на фабрике, а хранилище получает IDbContext.
Я хочу, чтобы каждый экземпляр Фабрики вставлял один и тот же экземпляр IDbContext, но между экземплярами Фабрики были отдельные экземпляры.
Итак:
1) Factory1 is created
2) Factory1 creates Repository1-1 that gets IDbContext1 injected
3) Factory1 creates Repository1-2 that gets IDbContext1 injected
4) Factory2 is created
5) Factory2 creates Repository2-1 that gets IDbContext2 injected
6) Factory2 creates Repository2-2 that gets IDbContext2 injected
Это должно гарантировать, что репозитории, созданные на одной и той же фабрике, имеют общую единицу работы.
Но, будучи новичком в MEF, я не уверен, как бы я поступил так.
EDIT
Вот что я получил:
public class RepositoryFactory
{
private readonly CompositionContainer _container;
[Import(RequiredCreationPolicy=CreationPolicy.NonShared)]
private readonly IDbContext _context;
public IRepository<T> CreateRepository<T>() where T : class, IEntity
{
//Somehow add the _context instance into the Repository import
return _container.GetExportedValue<EntityRepository<T>>();
}
}
, а затем
public class EntityRepository<T> : IRepository<T> where T : class, IEntity
{
// Perhaps a contract name might help!!
[Import(RequiredCreationPolicy=CreationPolicy.Shared)]
protected readonly IDbContext _context;