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

C# 如何从不同的程序集获取所有控制器类型,c#,.net,validation,model-view-controller,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()); 但是,问

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

Type controller = Assembly.GetExecutingAssembly().GetTypes()
                .FirstOrDefault(type => type.Name.ToLower() == string.Format("{0}Controller",this.RouteData["controller"].ToString()).ToLower());
但是,问题是我的控制器和viewModels位于两个不同的程序集上,因此Assembly.getExecutionGassembly()无法获取任何控制器。上面的代码在我拥有视图模型的程序集中。
如何从不同的程序集获取所有控制器。

我将假定第二个程序集被第一个程序集(保存视图模型的程序集)引用。您只需要获取引用的程序集并检查它是否已经加载,如果没有,则加载它,然后调用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());
}

Assembly.Load()
?如果您使用ASP.NET Core,那么有一些类似于应用程序部件的东西可以让您从不同的程序集中加载控制器。我不知道您想要获取这些类型的目的。Konrad有一点。。。在这种情况下,您将面临一个问题。康拉德建议的另一个替代方案是