Как я могу инициализировать некоторый экземпляр Dependency Injected? - PullRequest
0 голосов
/ 30 сентября 2010

Я использую StructureMap DI / IoC, и у меня есть общий репозиторий InMemory.Работает отлично.Мне было интересно, возможно ли определить начальные данные, которые содержит каждый репозиторий, когда он запрашивается?

Теперь первая реакция - это сделать это в конструкторе класса - но я использую универсальный репозиторий... так что я не знаю, какой тип класса будет создан .Затем я мог бы создать подкласс GenericRepository, а затем создать конструктор - конечно :) Это сработало бы , но я пытался избежать создания отдельного класса для каждого репозитория, когда GenericRepository более или менее делает всеЯ хочу :) (да, есть некоторые конкретные случаи, которые я делаю подклассом и т. Д., Но давайте сохраним этот пост, просто).

Итак, есть ли способ сказать

  1. Создайте экземпляр InMemoryGenericRepository, когда запрашивается IRepository
  2. Теперь вызовите этот статический метод (который заполняет этот момент Repo): Foo (репозиторий IRepository) {...}, который, конечно, передается в экземпляре, которыйбыл только что создан StructureMap.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2010

Ответ: Начало создания StructureMap :: .OnCreation(Action).

. Итак, с моим примером выше ...

For<IRepository<Post>>()
    .Use<InMemory.GenericRepository<Post>>()
    .OnCreation(x => x.Add(InMemoryData.CreatePostStubs());

Во-первых, статический метод CreatePostStubs() возвращает ICollection<Post>, который затем передается в метод с именем Add моему недавно созданному экземпляру GenericRepository<Post>.Это, по сути, добавляет все заглушки в мой репозиторий в памяти.

FUNKY !!

Так странно, пришло время для фанки холодной Медины ...

alt text

Приветствую @Zor за то, что меня отправили в правильном направлении ...

0 голосов
/ 30 сентября 2010

Я действительно рекомендую разделить его на подклассы. В конце концов, это объектно-ориентированный путь.

Но в любом случае, даже если ваш репозиторий является универсальным, вы не можете просто передать универсальную коллекцию в конструктор? Или я что-то недопонимаю?

...