Я пытаюсь правильно настроить зависимости в своем приложении Workflow. Кажется, лучший способ сделать это — использовать шаблон Service Locator, предоставляемый WorkflowExtensions.
В моем рабочем процессе используются два репозитория: IAssetRepository и ISenderRepository. У обоих есть реализации с использованием Entity Framework: EFAssetRepository и EFSenderRepository, но я бы хотел, чтобы оба использовали один и тот же DbContext.
У меня возникли проблемы с тем, чтобы оба использовали один и тот же DbContext. Я привык использовать IoC для внедрения зависимостей, поэтому я подумал, что мне придется внедрить DbContext в репозитории EF через их конструктор, но похоже, что это будет смешивать локатор службы и шаблон IoC, и я не мог найти простой способ добиться этого, поэтому я не думаю, что это путь вперед.
Я предполагаю, что мне нужно связать вызовы локатора службы? Чтобы конструктор моих репозиториев EF делал что-то вроде этого:
public class EFAssetRepository
{
private MyEntities entities;
public EFAssetRepository()
{
this.entities = ActivityContext.GetExtension<MyEntities>();
}
}
Очевидно, что приведенное выше не будет работать, потому что ссылка на ActivityContext составлена.
Как я могу получить некоторую форму цепочки зависимостей, используя шаблон локатора сервисов, предоставленный для WF?
Спасибо, Ник
РЕДАКТИРОВАТЬ
Я разместил обходной путь для моей проблемы ниже, но я все еще не доволен им. Я хочу, чтобы активность кода могла вызывать metadata.Require‹>(), потому что она не должна знать, как загружаются расширения, она должна просто ожидать, что они есть. Как бы то ни было, мой вызов metadata.Require‹> остановит рабочий процесс, поскольку расширение похоже не загружено.