首先,简单的问题。
event
当 MEF (System.ComponentModel.Composition) 创建零件的实例时是否可以接收?发生这种情况时,我想反映创建的对象并连接各种属性。在 Spring.Net 中,这可以通过IObjectPostProcessor
接口实现。
背景是我试图在 MEF 中实现发布者/订阅者模式。基本上,订阅者类这样做:
class MyContoller
{
[Command("Print")]
public void Print() { ... }
[Command("PrintPreview")]
public void PrintPreview() { ... }
}
我想检测 MyController 何时被实例化并连接任何具有CommandAttribute
.
发布者(例如菜单项)会Command.Get("Print").Fire()
发布上述事件。
第二个问题
也许在 MEF 中有一种我缺少的替代模式!!!
我看过一些关于MEF、Prism 和 Event Aggregate 的帖子,但看起来相当复杂。
供参考
仅供参考,这是 Spring.Net 实现的原始版本:
class CommandAttributeProcessor : IObjectPostProcessor
{
static ILog log = LogManager.GetLogger(typeof(CommandAttributeProcessor));
public object PostProcessAfterInitialization(object instance, string objectName)
{
foreach (MethodInfo methodInfo in instance.GetType().GetMethods())
{
foreach (CommandAttribute attr in methodInfo.GetCustomAttributes(typeof(CommandAttribute), true))
{
if (log.IsDebugEnabled)
log.Debug(String.Format("Binding method '{0}.{1}' to command '{2}'.", instance.GetType().Name, methodInfo.Name, attr.CommandName));
Command command = Command.Get(attr.CommandName);
command.Execute += (EventHandler) Delegate.CreateDelegate(typeof(EventHandler), instance, methodInfo);
}
}
return instance;
}
public object PostProcessBeforeInitialization(object instance, string name)
{
return instance;
}
}