我错过了什么,但不确定它是什么。我想实现这个方法,因此它扫描包含提供的类型的程序集并将它们添加到容器中。
问题是:如何将从查询返回的类型添加到扫描仪集合中?
public TorrentScannerContainer AddFromAssemblyOf<T>()
{
TorrentScannerContainer current;
lock (TorrentScannerContainer._padlock)
{
var assignableType = typeof(ITorrentScanner);
var scanners = AppDomain.CurrentDomain.GetAssemblies().ToList()
.SelectMany(x => x.GetTypes())
.Where(t => assignableType.IsAssignableFrom(t) && t.IsClass).ToList();
foreach (Type type in scanners)
{
var scanner = type as ITorrentScanner;
TorrentScannerContainer.Current.Scanners.Add(scanner);
}
current = TorrentScannerContainer.Current;
}
return current;
}
TorrentScannerContainer.Current.Scannners是ITorrentScanner的集合:
internal List<ITorrentScanner> Scanners { get; private set; }
我希望有人可以帮助我!
答案 0 :(得分:3)
嗯,问题是您尝试在ITorrentScanner的集合中添加类型。您应该在扫描程序中有一个类型列表,或者创建一个类型的实例:
foreach (Type type in scanners)
{
var scanner = Activator.CreateInstance(type) as ITorrentScanner;
if(scanner != null)
TorrentScannerContainer.Current.Scanners.Add(scanner);
}
当然,这意味着您的类型具有默认构造函数。如果不是这种情况,那么我不知道如何实现它们......但你肯定会这样做