2015-01-14 91 views
0

我正試圖從一個DLL中加載所有實現接口的類型。我希望能夠從DLL中獲取類型,創建每種類型的實例,然後將每種類型視爲實現接口。我已經寫了一個基本的例子,下面是我想要實現的。我可以將對象視爲實現反射界面嗎?

感謝您的幫助

class Program 
    { 
     private static List<IJob> _jobs; 

     static void Main(string[] args) 
     { 
      LoadJobs(); 

      foreach (var job in _jobs) 
      { 
       job.Run(); 
      } 

      Console.ReadKey(); 
     } 

     static void LoadJobs() 
     { 
      _jobs = new List<IJob>(); 

      var jobsPath = Directory.GetFiles(@"C:\Jobs\"); 

      foreach (var file in jobsPath) 
      { 
       var assembly = Assembly.LoadFrom(file); 

       foreach (var type in assembly.GetExportedTypes()) 
       { 
        var instance = Activator.CreateInstance(type); 
        var job = instance as IJob; 

        if(job != null) 
         _jobs.Add(job); 
       } 
      } 
     } 
    } 
+0

你混合兩個概念。 'type'是一個'Type',你將其作爲實例處理。 'IJob'類型永遠不會是真的。 –

+0

如果你想檢查一個*類型是否實現了接口*你可以這樣做:'type.GetInterfaces()。Contains(typeof(IJob))' –

+0

對不起,我打算在發佈之前添加實例。我不知道這是否仍然可行。 – DanMarionette

回答

0
foreach (var type in assembly.GetExportedTypes().Where(t => t.IsAssignableFrom(typeof (IJob)))) 
{ 
    var job = Activator.CreateInstance(type) as IJob; 
    if(job != null) _jobs.Add(job); 
} 
+0

@DanMarionette這是否解決了你的問題? – DoronG

相關問題