繼續尋求一個好的插件實現,我一直在測試StructureMap程序集掃描特性。獲取從基類繼承的類型實例,實現接口,使用StructureMap
所有插件都將繼承自抽象類PluginBase。這將提供對日誌等常見應用程序服務的訪問。根據它的功能,每個插件可能會實現其他接口,例如IStartUpTask。
我初始化我的插件,像這樣:
Scan(x => {
x.AssembliesFromPath(HttpContext.Current.Server.MapPath("~/Plugins"),
assembly => assembly.GetName().Name.Contains("Extension"));
x.AddAllTypesOf<PluginBase>();
});
我然後遇到的難點是如何對代碼的接口(不是PluginBase)工作。這是很容易與PluginBase工作:
var plugins = ObjectFactory.GetAllInstances<PluginBase>();
foreach (var plugin in plugins)
{
}
但具體功能(例如IStartUpTask.RunTask)是聯繫在一起的接口,而不是基類。
我很欣賞這可能不是特定於結構圖(也許更多的是一個反思問題)。
感謝, 本
@Joshua - OfType方法正是我現在所需要的,完美的。我在運行時知道所有的接口,不過也會看到IRegistrationConvention。謝謝 –
2010-04-27 13:23:47
@Joshua - 剛剛添加了一個自定義插件掃描器。我似乎沒有對於().Add(type)函數可用? –
2010-04-27 13:41:59
忽略上述內容 - 我使用的是舊版本的StructureMap。我現在已更新到最新版本。 – 2010-04-27 14:26:44