2009-07-20 73 views
0

我想要這樣做:加載實現接口的程序集的正確方法?

  1. 創建實現IMyInterface的大量程序集。標示在web.config中
  2. 在web.config或我的申請的app.config,定義它們中的哪一個來加載(它們可以具有不同的名稱)
  3. 應用程序啓動時,加載組件和使用它的IMyInterface的實現

這樣做的最好方法是什麼? 我現在正在使用Framework 3.5。我知道我可以定義一個包含程序集名稱的變量(例如key =「My assembly」,value =「myassembly.dll」,然後動態加載程序集,只是想知道是否有更多的程序集這樣做的正確的方式)

回答

3

組件沒有實現的接口;類型做

對於ASP.NET應用程序,我建議把每一個裝配在/bin目錄和使用web.config配置選項和Activator.CreateInstance創建實際的類型:

var typeName = "MyNamespace.MyClass, MyAssembly"; // load from config file 
IMyInterface instance = 
       (IMyInterface)Activator.CreateInstance(Type.GetType(typeName)); 
0

我這樣做如下(我使用基類,用抽象方法代替接口):

1 - 列出用我的基類實現的類。

Assembly assembly = null; 
AssemblyName assemblyName = new AssemblyName(); 
assemblyName.CodeBase = "FullPathToAssembly"; 

assembly = Assembly.Load(assemblyName); 


Type[] arrayTipo; 
arrayTipo = assembly.GetTypes(); 

var tipos = 
from t in arrayTipo 
where t.BaseType == typeof(DD.Util.BaseProcesso) 
select t; 

2 - 來電的類的實例執行的方法:

Type tipo = engine.GetType("FullClassName"); 
BaseProcesso baseProcesso = (BaseProcesso)Activaor.CreateInstance(tipo, new object[] { "ConstructorParameter1", "ConstructorParameter1") }); 
// Event 
baseProcesso.IndicarProgresso += new BaseProcesso.IndicarProgressoHandler(baseProcesso_IndicarProgresso); 
new Thread(new ThreadStart(baseProcesso.Executar)).Start(); 

對我的作品!

相關問題