我正在尝试使用Simple Injector订阅活动。我的班级有:
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
});
如何使用Simple Injector完成此操作?我试过四处寻找,但只在IEventHandler
/ ICommandHandler
实现中找到了内容,没有使用C#事件。
答案 0 :(得分:3)
Simple Injector中与Ninject的OnActivation
相当的是RegisterInitializer
。您的代码示例转换为以下Simple Injector代码:
container.Register<MyClass>();
container.RegisterInitializer<MyClass>(myObj =>
{
myObj.SomeEvent += MyStaticEventHandler.Handle; // for static
// or...
myObj.SomeEvent += container.GetInstance<MyEventHandler>().Handle; // for non-static
});
但是,您通常应该使用构造函数注入作为一种机制,以便在使用事件时解除类。当针对接口编程时,您可以使用构造函数注入实现相同数量的解耦。
使用构造函数注入具有以下优点: