Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Autofac. Вопрос по конфигурированию. / 6 сообщений из 6, страница 1 из 1
16.06.2015, 13:10
    #38984708
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Autofac. Вопрос по конфигурированию.
Привет.
Застрял. Подскажите плиз.

Есть у меня 3 сущности:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class First: IFirst
public First (ISecond second)
{}


class Second : ISecond
public Second (IThird third, IOther other)
{}




Как мне законфигурировать следующую ситуацию:

Мне нужно создать First.
Но чтобы ISecond я создал сам по следующему условию:
IThird должен быть создан самим Autofac согласно правилам его конфигурирования (меня они не волнуют. Т.е. мне просто нужно чтобы зависимость была создана сама как-то там),
а IOther должен быть передан мной.

Как такое сделать ?
Мне кажется должно быть что-то типа:

Код: c#
1.
2.
            auto.RegisterType<First>()
                .WithParameter("second", new Second (auto.Resolve<IThird>(), new MyOther))



но у ContainerBuilder нету метода Resolve !!
...
Рейтинг: 0 / 0
16.06.2015, 13:17
    #38984721
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Autofac. Вопрос по конфигурированию.
В принципе, данных подход разрушает принцип DI

Может сделать фабрику для second и избавиться от хардкода для second в конфигураторе AF?
...
Рейтинг: 0 / 0
16.06.2015, 13:36
    #38984757
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Autofac. Вопрос по конфигурированию.
Shocker.Pro,

С чего это нарушение DI ?
DI не требует чтобы ВСЕ резолвилось автоматически.

Бывают ситуации, когда мне необходимо вмешаться в процесс. Для чего и существует метод WithParameter. Он же не зря сделан.
Мне вот и нужно передать кастомный (созданный с заданными мною парметрами) тип. Но я столкнулся с тем, что сам тип создается с использованием какого-то другого типа !

Если бы там была строка. Все было бы просто И РАБОТАЛО БЫ:


Код: c#
1.
2.
 auto.RegisterType<First>()
                .WithParameter("second", "HelloWorld")



тут нету проблемы. Все работает.

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


Как это сделать ? есть идеи ? :)
...
Рейтинг: 0 / 0
16.06.2015, 13:38
    #38984762
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Autofac. Вопрос по конфигурированию.
Shocker.ProМожет сделать фабрику для second и избавиться от хардкода для second в конфигураторе AF?

Я идею не понял.
Но если это поможет решить мою проблему, то я только за. Можете показать код?
...
Рейтинг: 0 / 0
16.06.2015, 13:58
    #38984806
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Autofac. Вопрос по конфигурированию.
ProBiotekShocker.ProМожет сделать фабрику для second и избавиться от хардкода для second в конфигураторе AF?

Я идею не понял.
Но если это поможет решить мою проблему, то я только за. Можете показать код?Нужно сделать класс ISecondFactory, который умеет по запросу генерировать экземпляр Second, сам при этом имеет зависимость от IThird

Соответственно IFirst должен иметь зависимость не от ISecond, а от ISecondFactory, а в конструкторе получить из этой фабрики экземпляр Second.
Соответственно, зависимость от ISecond в AF не прописывается
...
Рейтинг: 0 / 0
16.06.2015, 15:25
    #38984917
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Autofac. Вопрос по конфигурированию.
нашел ответ, в общем.

все просто, как оказалось:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
cb.RegisterType<First>()
  .WithParameter((pi, c) => pi.Name == "second", 
                 (pi, c) => new Second(c.Resolve<IThird>(), new MyOther(myValue)));
or

cb.RegisterType<First>()
  .WithParameter((pi, c) => pi.Name == "second", 
                 (pi, c) => c.Resolve<ISecond>(TypedParameter.From<MyOther>(myValue)));



Т.е. оказвыается у WithParameter есть перегруженный метод принимающий контейнер. Через который и можно резолвить
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Autofac. Вопрос по конфигурированию. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]