1

我错过了一些东西,但不确定它是什么。我想实现这个方法,所以它扫描包含所提供类型的程序集并将它们添加到容器中。

问题是:如何将查询返回的类型添加到扫描仪集合中?

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; }

我希望有人可以帮助我!

4

1 回答 1

3

好吧,问题是您尝试在 ITorrentScanner 的集合中添加类型。您应该在扫描仪中有一个类型列表,或者创建一个 type 的实例:

foreach (Type type in scanners)
{
    var scanner = Activator.CreateInstance(type) as ITorrentScanner;
    if(scanner != null)
         TorrentScannerContainer.Current.Scanners.Add(scanner);
}

当然,这意味着您的类型有一个默认构造函数。如果不是这种情况,那么我不知道如何实例化它们......但你当然知道

于 2012-11-21T12:44:50.030 回答