Как мне установить фабрику пользовательских контроллеров в Orchard?
Могут ли те, кто более знаком с Orchard CMS, помочь мне с проблемой? Я пишу модуль Orchard, и у моих контроллеров есть аргументы конструктора (сервисные интерфейсы).
Где в Orchard я настраиваю собственную фабрику контроллеров, чтобы справиться с этим (не мешая другим модулям Orchard, которые установил пользователь)
Это что-то сделано в Global.asax? я нашел
ControllerBuilder.Current.SetControllerFactory(new OrchardControllerFactory());
в OrchardStarter.cs, поэтому я не понимаю, где будут установлены другие фабрики контроллеров.
Это просто сделано с помощью Autofac DI? Если так, то если у кого-то есть пример короткого кода, это было бы здорово! (Я новичок в Autofac и Orchard)
Спасибо
1 ответ
Вы не должны менять фабрику контроллеров. Orchard предоставляет более простые способы использования внедрения зависимостей из коробки.
Самый простой способ сделать это - унаследовать ваш интерфейс от Orchard.IDependency
, Затем Orchard автоматически зарегистрирует вашу реализацию в Autofac и вставит ее в любой конструктор. Если вам нужен больший контроль над процессом регистрации, вы можете создать модуль Autofac и зарегистрировать там свой сервис. Orchard также должен автоматически подобрать этот модуль и добавить его в контейнер внедрения зависимостей.
Например, если вы создаете интерфейс:
using Orchard;
public interface IFoo : IDependency {
...
}
И создайте реализацию вашего интерфейса:
public class Foo : IFoo {
...
}
Тогда Орчард автоматически введет Foo
экземпляр любого конструктора, который определяет параметр типа IFoo
,