【问题标题】:How to inject event handlers into events with Unity如何使用 Unity 将事件处理程序注入事件
【发布时间】:2010-01-19 17:12:26
【问题描述】:

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

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

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

我有另一个班级负责处理这些事件:

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

我想做的是自动将处理程序从 CrashMonitor 注入到 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] 属性,并且一切都应该正常工作。

【问题讨论】:

    标签: dependency-injection unity-container


    【解决方案1】:

    我在 codeplex 的统一讨论组中问过同样的问题

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

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

    【讨论】:

    • 嘿,克里斯蒂安,你有没有发现更多关于这个的信息,或者你是否坚持原来的定制设计?我正在尝试将 Unity 与“纯”MVVM 设计一起使用,该设计最初具有从基本 ViewModel 继承的 CloseCommand,我将委托传递给自定义 EventHandler。效果很好,直到我尝试使用 Unity 注入所有内容,然后它很快就坏了。如果您有可能对我有好处的解决方案,我将不胜感激。谢谢!
    猜你喜欢
    • 2015-11-03
    • 2013-12-24
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多