我想加载实现接口IFormLoadSubscriber
的所有表单。
接口
Namespace Interfaces
Public Interface IFormLoadSubscriber
End Interface
End Namespace
此时它没有添加任何内容,订阅就足够了。
表格
Namespace Forms
Public Class MainForm
Inherits Base.Base
Implements IFormLoadSubscriber
End Class
End Namespace
Base.Base是一个强制执行基本行为的表单。
我有什么
Private Shared Function GetSubscribers() As List(Of Type)
Dim type = GetType(IFormLoadSubscriber)
Dim subscribers = AppDomain.CurrentDomain.GetAssemblies() _
.Where(Function(x) type.IsAssignableFrom(type)) _
.Select(Function(x) x.GetTypes())
Return subscribers
End Function
问题
上面的代码没有按预期工作,因为它返回一个包含各种类型的大型列表。如果包含我的,则无法手动查找。无论如何,这不是我所需要的。
问题
如何更改上面的代码,使其只返回一个类(因为只有一个类实现IFormLoadSubscriber
),在本例中是我的MainForm?
答案 0 :(得分:4)
尝试将其更改为
Private Shared Function GetSubscribers() As List(Of Type)
Dim type = GetType(IFormLoadSubscriber)
Dim subscribers = AppDomain.CurrentDomain.GetAssemblies() _
.SelectMany(Function(x) x.GetTypes()) _
.Where(Function(x) type.IsAssignableFrom(x))
Return subscribers
End Function
答案 1 :(得分:2)
SelectMany
将比列表列表更紧密。
Dim subscribers = AppDomain.CurrentDomain.GetAssemblies() _
.SelectMany(Function(x) x.GetTypes() _
.Where(Function(y) type.IsAssignableFrom(y)))
我还在SelectMany中移动了Where
子句。
你的where子句也不正确,type.IsAssignableFrom(type)
总是如此。