我有一个场景,我需要检查控件的 DataContext 是否正在实现“INotifyPropertyChanged”和另一个名为“ITObject”的接口(interface)。接口(interface)“ITObject”位于其他一些程序集中,实现类称为“TObjectBase”,它有一个名为“TObjectChanged”的事件。
我们不会将他们的程序集添加到我们的项目中,但他们会将我们的程序集添加到我们构建并提供给他们的项目中。
我遇到的问题是,我拥有的唯一信息是这些类/接口(interface)名称的文本表示,仅此而已,但我需要在运行时检查控件的 DataContext 是否正在实现这些接口(interface)并 Hook 到 TObjectChanged 事件并对此使用react。
我尝试使用 Type.GetType("TObjectBase") 来检查它,但我需要完全限定名称,不是吗?因为它们都位于我不知道的不同组件中。此外,IsAssignableFrom("ITObject") 也失败了。
我想知道这里的用户群是否可以帮助我解决这个问题。
最佳答案
您可以加载应用程序域中的所有事件程序集,然后遍历每个程序集的类型以查找名称匹配。但是,如果没有程序集名称,您将无法像您看到的那样使用 Type.GetType()
。
以下简单程序适合我。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetFqTypeName("IMyInterface"));
Console.ReadKey();
}
static String GetFqTypeName(string shortTypeName)
{
return AppDomain.CurrentDomain.GetAssemblies()
.ToList()
.SelectMany(x => x.GetTypes())
.Where(x => x.Name == shortTypeName)
.Select(x => x.FullName)
.FirstOrDefault();
}
}
public interface IMyInterface { }
关于c# - 如何在 C# 中使用反射获取类型的完全限定名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768587/