Autofac разрешить в библиотеке классов - PullRequest
0 голосов
/ 28 января 2019

У меня есть приложение веб-форм (myWebForms)

У меня есть проект библиотеки классов (myClassLibrary), в котором есть класс с именем "myClass"

Ссылки на WebForms myClassLibrary

Я добавил ссылки Autofac в приложение веб-форм, установил глобальный asax для разрешения «myClass» и т. Д. *

. Я вижу, что в моем коде aspx позади, открытое свойство, добавленное для AutoFac, создаетсяправильно с помощью AutoFac.

Пока все это замечательно, однако мой настоящий проект намного сложнее, чем этот, и мне нужно иметь доступ к разрешенному "myClass" из myClassLibrary

Как мне этого добиться?(внедрить ли контейнер в myClass из проекта веб-форм? Могу ли я каким-либо образом ссылаться на глобальное свойство веб-форм или я снова собираю контейнер в myClassLibrary?)

1 Ответ

0 голосов
/ 30 января 2019

Во-первых, я бы порекомендовал ознакомиться с документацией Autofac в веб-формах и быстро начать работу.Я думаю, что вы можете получить ответы на многие вопросы, хотя я понимаю, что это очень много.DI сложен, и я боюсь, что предоставление здесь «быстрого ответа» может привести к неправильному пониманию происходящего.

В общем ...

  • Вы регистрируете типы в Autofac, которые хотите ввести.Это включает все типы, которые понадобятся вашим веб-формам , а также все зависимости, которые понадобятся этим типам .
  • Autofac, благодаря своей интеграции, разрешит зависимости и поместит их в ваши веб-формы.Если эти объекты также имеют зависимости (например, параметры конструктора), то Autofac также автоматически определит их и подключит.

Скажите, что ваша сетьДля формы требуется свойство с именем IEmailSender ...

public IEmailSender EmailSender { get; set; }

Вашему объекту отправителя электронной почты может потребоваться другая зависимость, например, фабрика сетевых сокетов или что-то в этом роде.

public EmailSender(ISocketFactory socketFactory)

Вы должны зарегистрироватьсяоба из них в контейнере. Неважно, из какой сборки они происходят.Вы должны зарегистрировать их в контейнере Autofac, чтобы он работал.

builder.RegisterType<EmailSender>().As<IEmailSender>();
builder.RegisterType<TcpFactory>().As<ISocketFactory>();

Когда ваша веб-форма получает IEmailSender, Autofac сначала разрешит TcpFactory, затем укажите это вконструктор EmailSender, тогда он будет передан вашей веб-форме.

Опять же, многое из этого описано в документах и ​​примерах.Хотя я понимаю, что есть много и это может быть ошеломляющим, Я настоятельно призываю вас просмотреть эту информацию , потому что это может сэкономить вам много времени и боли в долгосрочной перспективе.

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