0

与这篇文章松散相关,我需要获取控制器文件夹中所有控制器的列表。目前我们只是在试验一些东西。我已经通过 API 等进行了搜索,但没有任何运气。我可以很好地获得当前的控制器,但不幸的是,其他控制器不行。

我不得不静态地创建一个我想要的实例化控制器列表,如下所示:

public static IList<AbstractHtmlPageController> _controllers = new List<AbstractHtmlPageController>
{
    new HomeController(),
    new UserController()
};

这显然不是一个理想的解决方案。

干杯

4

1 回答 1

1

您可以尝试使用反射(尚未测试):

public static IList<AbstractHtmlPageController> GetControllers()
{
    Assembly
        .GetExecutingAssembly()
        .GetTypes()
        .Where(t => 
            t != typeof(AbstractHtmlPageController) && 
            typeof(AbstractHtmlPageController).IsAssignableFrom(t)
        )
        .Select(t => (AbstractHtmlPageController)Activator.CreateInstance(t))
        .ToList();
}

这种方法的实用性是非常值得怀疑的。在应用程序的生命周期内实例化这样的控制器可能很危险。控制器不应该被共享。将控制器的实例化留给您正在使用的依赖注入框架。它们的生命周期应该很短,最好仅限于当前用户的请求。

于 2010-08-17T08:23:53.700 回答