0

我正在开发一个使用 Castle Windsor 的 MVC 5 应用程序。我已经使用区域分隔了我的代码,以使其更易于管理。我还更新了 IWindorInstaller 的实例化类,以包含一个额外的方法,该方法将从这个新区域中找到控制器。

我的代码如下所示:

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Register(FindStandardControllers());
    container.Register(FindAdminControllers());
}

private BasedOnDescriptor FindStandardControllers()
{   
    return Classes.FromThisAssembly()
        .BasedOn<IController>()
        .If(Component.IsInSameNamespaceAs<HomeController>())
        .If(t => t.Name.EndsWith("Controller"))
        .LifestyleTransient();
}

private BasedOnDescriptor FindAdminControllers()
{
    return Classes.FromThisAssembly()
        .BasedOn<IController>()
        .If(Component.IsInSameNamespaceAs<AdminController>())
        .If(t => t.Name.EndsWith("Controller"))
        .LifestyleTransient();
}

所有这些都有效,但有没有更好的方法来告诉温莎自动从每个新区域拿起所有控制器?

如果我想在每个区域中包含类似命名的控制器(例如:HomeController),我会特别担心。

4

1 回答 1

1

由于您的所有控制器都继承自IController您,因此不应指定命名空间和后缀。

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Register(
        Classes.FromThisAssembly()
            .BasedOn<IController>()
            .LifestyleTransient()
    );
}

如果您有同名的控制器,它们将位于不同的命名空间中,Windsor 将正确解析它们。

于 2013-10-18T15:54:42.623 回答