如何使用Unity将事件处理程序注入事件

时间:2010-01-13 13:06:24

标签: dependency-injection unity-container

如何将事件处理程序注入(附加)到由Unity IoC容器创建的实例的.net事件中?

示例:我有一个通过标准.net事件报告错误的类:

class CameraObserver
{
    public event Action<Exception> UnhandledException;      
    [...]
}

我有另一个负责处理这些事件的课程:

class CrashMonitor
{
    public static void HandleException(Exception x)
    { ... }
}

我想要做的是自动从CrashMonitor中将Handler注入到CameraObserver的每个实例中,就像在这个伪代码中一样:

UnityContainer container = new UnityContainer();
container.RegisterInstance<Action<Exception>>(CrashMonitor.HandleException)
     .RegisterType<CameraObserver>(new InjectionEvent(UnhandledException));

var observer = container.Resolve<CameraObserver>();
// CrashMonitor.HandleException is now attached to observer.UnhandledException

有没有办法用Unity做到这一点?我可以想到一个丑陋的解决方法,比如从CameraObserver派生,带有特殊的构造函数,用于依赖注入或方法注入。但这会使系统变得更复杂(因为你必须编写代码)。我天真地期望你可以在事件上添加[Dependency]属性,一切都应该有效。

1 个答案:

答案 0 :(得分:3)

我在codeplex的团结讨论组中提出了同样的问题

http://unity.codeplex.com/Thread/View.aspx?ThreadId=80728

答案是“什么都没有”。有一个EventBroker的演示,但它做的更复杂(发布者和订阅者的自动装配)。我仍然认为注入事件的KISS机制很有用,并且我自己开始这样做。