2012-11-21 28 views
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; } 

我希望有人能幫助我!

+0

結果是什麼?有錯誤嗎? –

+0

我已更新我的問題。問題是:我如何將我的查詢返回的類型添加到掃描器集合中?我有一個類型,需要添加ITorrentScanner –

+0

你不需要一個字典的界面和類型? – Jon

回答

3

嗯,問題是你嘗試在ITorrentScanner的集合中添加類型。您應該有類型的掃描儀列表,或創建類型的實例:

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

當然,這意味着你的類型有一個默認的構造函數。如果情況並非如此,那麼我不知道如何實現它們......但肯定是你做的

+0

這樣做的工作,該死的我是如此接近:-)。 –