我有一个显示类属性的属性网格(让我们称之为MyClass)
我想在MyClass中有一个属性,它将包含实现接口的所有类(让它称为ISomething),并将在PropertyGrid中表示为下拉列表(当你有一个枚举时表现相同)
接下来,当选择列表中的一个类时,将获得所选类的所有属性并显示在propertyGrid中
我做了一些阅读,发现了如何获取所有类列表并创建它的实例的部分解决方案,但不确定如何使用此实例在属性网格中创建类列表。
var instances = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.GetInterfaces().Contains(typeof(ISomething))
&& t.GetConstructor(Type.EmptyTypes) != null
select Activator.CreateInstance(t) as ISomething;
foreach (var instance in instances)
{
instance.Foo(); // where Foo is a method of ISomething
}
有什么建议吗?
答案 0 :(得分:0)
使用Ninject:
var kernel = new StandardKernel();
kernel.Bind<ISomething>().To<Something>();
kernel.Bind<ISomething>().To<Something2>();
var instances = kernal.GetAll<ISomething>();
foreach (var instance in instances)
{
instance.Foo();
}
答案 1 :(得分:0)
以下代码将返回List
个对象,每个对象都有类名和List
属性名称:
var classesWithProperties =
Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => t.GetInterfaces().Contains(typeof(ISomething)) && t.IsClass)
.Select(c => new { ClassName = c.FullName, Properties = c.GetProperties().Select(p => p.Name)})
.ToList();
然后您可以按此集合进行迭代并根据需要显示它。