如何从不同的程序集中获取所有控制器类型

时间:2018-05-16 20:41:28

标签: c# .net validation model-view-controller

我正在实现自定义远程验证,我需要获取所有控制器,为此我使用了代码:

Type controller = Assembly.GetExecutingAssembly().GetTypes()
                .FirstOrDefault(type => type.Name.ToLower() == string.Format("{0}Controller",this.RouteData["controller"].ToString()).ToLower());

但是,问题是我的控制器和viewModel在两个不同的程序集上,因此Assembly.GetExecutingAssembly()不会获得任何控制器。上面的代码是在我有一个视图模型的程序集中。 如何从不同的装配中获得所有控制器。

1 个答案:

答案 0 :(得分:0)

我将假设您的第二个程序集由第一个程序集引用(持有您的视图模型的程序集)。您只需要获取引用的程序集并检查它是否已经加载,如果没有,则加载它然后只需调用 GetTypes ,就像执行程序集一样。这是一幅草图:

var assemblies = executingAssembly.GetReferencedAssemblies();
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToArray()();
foreach (var assemblyName in assemblies)
{
    var assembly = loadedAssemblies.FirstOrDefault(a => a.FullName == assemblyName.FullName) ??
                   AppDomain.CurrentDomain.Load(assemblyName);
    Type controller = assembly.GetTypes()
        .FirstOrDefault(type => type.Name.ToLower() == string.Format("{0}Controller",this.RouteData["controller"].ToString()).ToLower());
}