powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Autofac. Вопрос по конфигурированию.
6 сообщений из 6, страница 1 из 1
Autofac. Вопрос по конфигурированию.
    #38984708
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Застрял. Подскажите плиз.

Есть у меня 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
Autofac. Вопрос по конфигурированию.
    #38984721
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, данных подход разрушает принцип DI

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

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

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

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


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



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

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


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

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

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

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

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

Код: 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
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Autofac. Вопрос по конфигурированию.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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