Как мне установить фабрику пользовательских контроллеров в 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,

Другие вопросы по тегам