如何使用Autofac与方法连接事件?

是否可以通过接口/类(通过构造函数和属性注入)将事件连接到具有Autofac的方法而不是整个对象。 我想绑定在function级别而不是类型级别。 以编程方式我希望完成以下工作(在C#中):

someType.Output += someOtherType.Input; 

例如,Spring.net支持以下构造来实现:

       

Autofac能够做到这一点以及如何做到这一点? 是否可以将xml配置用于此类任务?

我假设你的对象没有直接依赖,比如:

  public class SomeType { public event EventHandler Input; public void Raise() { if (Input != null) { Input(this, new EventArgs()); } } } public class SomeOtherType { public void Output(object source, EventArgs handler) { Console.WriteLine("Handled"); } } 

您可以使用Activated或绑定委托:

活性:

  ContainerBuilder cb = new ContainerBuilder(); cb.RegisterType(); cb.RegisterType() .OnActivated(act => { var other = act.Context.Resolve(); act.Instance.Input += other.Output; }); var container = cb.Build(); var obj2 = container.Resolve(); obj2.Raise(); 

委托版本,替换注册:

  cb.Register(ctx => { var other = ctx.Resolve(); var obj = new SomeType(); obj.Input += other.Output; return obj; }).As(); 

作为旁注,执行此类绑定有时可能有点危险(因为您创建了事件依赖项)并创建了内存泄漏。

创建一个附加两个元素的小类,并在不再需要时实现IDisposable以取消注册事件,这可能是一个明智的选择。

我不认为通过xml配置连接事件是可能的,对于这种类型的绑定,我更喜欢代码提供的编译时安全性,但也许你有一个xml的用例。