C# 如何在Orchard中设置自定义控制器工厂?

C# 如何在Orchard中设置自定义控制器工厂?,c#,asp.net-mvc,dependency-injection,orchardcms,controller-factory,C#,Asp.net Mvc,Dependency Injection,Orchardcms,Controller Factory,那些更熟悉Orchard CMS的人能帮我解决一个问题吗?我正在编写一个Orchard模块,我的控制器有构造函数参数(服务接口) 在Orchard的何处设置自定义控制器工厂来处理此问题(不干扰用户安装的其他Orchard模块) 是在Global.asax中完成的吗?我找到了 ControllerBuilder.Current.SetControllerFactory(new OrchardControllerFactory()); 在OrchardStarter.cs中,所以我不知道其他控制器

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

在Orchard的何处设置自定义控制器工厂来处理此问题(不干扰用户安装的其他Orchard模块)

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

ControllerBuilder.Current.SetControllerFactory(new OrchardControllerFactory());
在OrchardStarter.cs中,所以我不知道其他控制器工厂将设置在哪里

是用Autofac DI完成的吗?如果是这样,如果有人有一个简短的代码样本,那将是伟大的!(我是Autofac和Orchard的新手)


谢谢

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

最简单的方法是从
Orchard.IDependency
继承接口。Orchard将自动向Autofac注册您的实现,并将其注入任何构造函数。如果您需要对注册过程进行更多控制,则可以创建Autofac模块并在那里注册您的服务。Orchard还应该自动获取该模块并将其添加到依赖项注入容器中

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

using Orchard;

public interface IFoo : IDependency {
    ...
}
public class Foo : IFoo {
    ...
}
并创建接口的实现:

using Orchard;

public interface IFoo : IDependency {
    ...
}
public class Foo : IFoo {
    ...
}

然后,Orchard将自动向定义类型为
IFoo

的参数的任何构造函数注入
Foo
实例,这正是我要寻找的。回答得很好。