继续寻求一个好的插件实现,我一直在测试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