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 のコレクションに型を追加しようとすることです。スキャナーにタイプのリストを用意するか、タイプのインスタンスを作成する必要があります。

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 に答える