Создавайте новые репозитории, продолжая использовать Dependency Injection с wcf - PullRequest
0 голосов
/ 06 июня 2011

У меня есть служба wcf, которая берет IRepository

IRepository irepo;

public SomeService(IRepository repo)
{
    this.irepo = repo;
}

Репозитории содержат методы, такие как Save, Delete и т. Д., И принимают CustomDataContext через конструктор:

public class ExampleRepository: IRepository, IDisposible {

   public ExampleRepository(CustomDataContext datacontext)
   {
       this.dc = datacontext;
   }

   ...
}

Позже в сервисе у меня есть несколько методов, которым нужно будет использовать репозиторий (и позже избавиться от него в методе). Теперь, когда я хочу использовать Dependency Injection, чтобы отключить репозитории для тестирования, а не для тестирования, как мне объявить конкретный репозиторий. Я мог бы создать новый экземпляр хранилища следующим образом:

using (IRepository repos = (IRepository)Activator.CreateInstance(irepo.GetType(), new object[] {new CustomDataContext()} ))
{
     ...
}

но я предполагаю, что это медленный (и неправильный) способ сделать это

Есть ли способ сделать новый репозиторий, основанный на введенном типе, или я просто усложняю то, что необходимо?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Попробуйте ввести Func<CustomDataContext, IRepository>, если ваш контейнер допускает такое поведение. В противном случае введите IRepositoryFactory, который будет иметь метод CreateInstance.

1 голос
/ 06 июня 2011

Вся идея внедрения зависимостей заключается в том, что есть какой-то контейнер, который разрешает ваши зависимости за вас.Есть ли причина, по которой вы не используете платформу для внедрения ваших зависимостей, например, structmap или unity?

Если у вас есть контейнер, вы должны запросить новый экземпляр вашего типа из контейнера, который создает его для васи разрешает все зависимости, если таковые имеются для вас этого конкретного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...