1

我已经使用 CustomControllerFactory 覆盖了 DefaultControllerFactory,它实际上是使用 StructureMAp ObjectFactory 来使用 IOC 构造控制器实例。但是有些如何找不到控制器实例并对其进行故障转移。笔记。我也已经在 Global.asax 中设置了 DEfaultControllerFactory。那么除了将我的注册表注册到 SM 之外,我还有什么要做的吗?

我了解注册控制器可以解决问题,但我想知道为什么它不能像 defaultFactory 那样自动检测控制器?

4

2 回答 2

3

这是控制器工厂的外观:

public class ControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        if (controllerType != null)
        {
            return (IController)ObjectFactory.GetInstance(controllerType);
        }
        return null;
    }
}

StructureMap 配置文件:

public class DependencyRegistry : Registry
{
    protected override void configure()
    {
        Scan(x =>
                 {
                     x.Assembly("MyApp.Web");
                     x.Assembly("MyApp.Model");
                     x.Assembly("MyApp.DataAccess");
                     x.With<DefaultConventionScanner>();
                 });
        base.configure();
    }

}

使用默认约定配置 StructureMap 的函数:

public void RegisterDependencies()
    {
        ObjectFactory.Initialize(InitializeStructureMap);
    }

    private void InitializeStructureMap(IInitializationExpression x)
    {
        x.AddRegistry<DependencyRegistry>();
    }

控制器示例:

public class MyController : Controller
{
    private IMyRepository _repository;

    public MyController (IRepository repository)
    {
        _repository = repository;
    }
}

不要忘记调用 RegisterDependencies() 函数...

我希望这有帮助。

于 2009-04-09T12:32:58.577 回答
0

您是否在结构图中注册了控制器?(注意,区分大小写)

于 2009-04-08T17:20:20.080 回答