简单注入器 - 使用 += 运算符(加号等于)订阅事件,例如 Ninject 的 OnActivation



我正在尝试使用简单喷油器订阅事件。我的课有:

public class MyClass
{
    public event Action<MyClass> SomeEvent;
    //...
}

使用ninject,可以使用 OnActivation()

完成
Bind<MyClass>().ToSelf()
    .OnActivation((context, myObj) =>
    {
        myObj.SomeEvent += MyStaticEventHandler.Handle; // for static
        // or...
        myObj.SomeEvent += context.Kernel.Get<MyEventHandler>().Handle; // for non-static
    });

这是如何用简单喷油器完成的?我尝试环顾四周,但仅在IEventHandler/ICommandHandler实现上找到内容,没有使用C#事件。

简单喷油器中与Ninject的OnActivation等效的是RegisterInitializer。您的代码示例转换为以下简单喷油器代码:

container.Register<MyClass>();
container.RegisterInitializer<MyClass>(myObj =>
{
    myObj.SomeEvent += MyStaticEventHandler.Handle; // for static
    // or...
    myObj.SomeEvent += container.GetInstance<MyEventHandler>().Handle; // for non-static
});

但是,您通常应该更喜欢使用构造函数注入作为一种机制,以将类别用于使用事件的类别。当您针对接口。。

使用构造函数注入的优点是:

  • 容器可以为您分析对象图,并检测任何配置陷阱,例如圈养依赖。
  • 它提高了可发现性,因为接口不如事件抽象,这使读者可以理解类使用的内容并允许轻松导航到实现。
  • 它可以防止时间耦合。

相关内容

  • 没有找到相关文章

最新更新