Я пытаюсь получить инъекцию зависимостей Unity, работающую с сервисом WCF, который использует Entity Framework, но я смущаюсь об использовании контекста и репозитория.Использование инъекции зависимостей с использованием метода службы WCF и EF
Способ, которым я разработал его, состоит в том, чтобы иметь несколько классов репозитория, например UserRepository, MessageRepository, LocationRepository, каждый из которых принимает объект EF DbContext в качестве параметра конструктора. Это позволяет мне управлять Единицей работы на уровне контекста, вызывая context.Save() или rollback и т. Д. Для управления транзакциями через репозитории.
Путаница, в которой я нахожусь, заключается в том, что я не уверен, как представить это в зависимости от инъекции. Я хочу иметь два сценария:
a) Когда служба WCF создается через методы WCF, я хочу, чтобы он использовал класс DbContext, который я создал, и создать объекты репозитория, передав в созданном DbContext, который будет подключаться к База данных Entity Framework.
b) Когда методы службы WCF протестированы из отдельного тестового проекта, я хочу высмеять объекты репозитория, чтобы вернуть издеваемую информацию.
Если бы я просто использовал классы репозитория, это было бы относительно просто, как в каждом методе службы WCF, который я мог бы назвать Container.Resolve(), а затем я мог бы использовать фабрику Unity WCF для установки конкретных типов для создания экземпляра WCF и вручную настройте контейнер Unity в моем тестовом проекте для издевающихся типов.
Но сложность заключается в том, что моим репозиториям нужен класс DbContext для передачи в качестве параметра конструктора, который будет выходить за пределы срока существования репозитория, и мне также нужно иметь ссылку на него в моей службе методы, например
public bool CreateUser(DbUser user)
{
try
{
using (var context = new MyDbContext())
{
var repository = new UserDataRepository(context);
user.GenerateUserLight();
user.GenerateUserProfileLight();
var result = repository.InsertItem(user);
repository.Save();
return result;
}
}
catch (Exception ex)
{
return false;
}
}
Как я могу адаптировать выше метод использовать Unity Dependency Injection, так что я могу дразнить его для тестового проекта?