2

那些更熟悉 Orchard CMS 的人可以帮我解决问题吗?我正在编写一个 Orchard 模块,并且我的控制器具有构造函数参数(服务接口)。

我在 Orchard 的什么地方设置了一个自定义控制器工厂来处理这个问题(不干扰用户安装的其他 Orchard 模块)

是在 Global.asax 中完成的吗?我已经找到

ControllerBuilder.Current.SetControllerFactory(new OrchardControllerFactory());

在 OrchardStarter.cs 中,所以我对设置任何其他控制器工厂的位置感到困惑。

它只是使用 Autofac DI 完成的吗?如果是这样,如果有人有一个简短的代码示例,那就太好了!(我是 Autofac 和 Orchard 的新手)

谢谢

4

1 回答 1

3

您不应该更改控制器工厂。Orchard 提供了更简单的方法来使用开箱即用的依赖注入。

最简单的方法是从Orchard.IDependency. 然后,Orchard 将自动使用 Autofac 注册您的实现并将其注入任何构造函数。如果您需要更多地控制注册过程,那么您可以创建一个 Autofac 模块并在那里注册您的服务。Orchard 还应该自动选择该模块并将其添加到依赖注入容器中。

例如,如果您创建一个接口:

using Orchard;

public interface IFoo : IDependency {
    ...
}

并创建你的接口的实现:

public class Foo : IFoo {
    ...
}

然后 Orchard 会自动将一个Foo实例注入到任何定义了 type 参数的构造函数中IFoo

于 2013-10-24T19:29:58.983 回答