C# .NET:订阅事件,解耦。国际奥委会?

C# .NET:订阅事件,解耦。国际奥委会?,c#,.net,events,inversion-of-control,decouple,C#,.net,Events,Inversion Of Control,Decouple,我正在用.NET/C编写一个服务,它接收项目的更新。 当一个项目被更新时,我想做几个动作,将来还会有更多的动作。我想通过一些Commo模式将事件中的操作解耦。我的大脑在说IOC,但我很难找到我想要的。 基本上,我的想法是让控制器接收更新的项目,对订阅事件的操作进行come-config并调用它们。当然存在一些轻量级、快速和易于使用的框架,这仍然是最新的。 你会推荐什么?为什么?(强调易于使用和快速)。有一种模式使用DI容器(IoC,是的)。有很多DI容器,我个人使用的是温莎城堡。但任何容器都应该

我正在用.NET/C编写一个服务,它接收项目的更新。 当一个项目被更新时,我想做几个动作,将来还会有更多的动作。我想通过一些Commo模式将事件中的操作解耦。我的大脑在说IOC,但我很难找到我想要的。 基本上,我的想法是让控制器接收更新的项目,对订阅事件的操作进行come-config并调用它们。当然存在一些轻量级、快速和易于使用的框架,这仍然是最新的。
你会推荐什么?为什么?(强调易于使用和快速)。

有一种模式使用DI容器(IoC,是的)。有很多DI容器,我个人使用的是温莎城堡。但任何容器都应该做到这一点。 例如,您可以创建这样的接口:

public ISomeAction
{
    void Execute(SomeArg arg);
}
而且,当您需要调用所有操作时,您可以这样使用它:

var actions = container.ResolveAll<ISomeAction>();
foreach (var action in actions)
{
    action.Execute(arg);
}
container.Register(Component.For<ISomeAction>().ImplementedBy<ConcreteAction());
var actions=container.ResolveAll();
foreach(行动中的var行动)
{
action.Execute(arg);
}
要“注册”操作,您需要执行以下操作:

var actions = container.ResolveAll<ISomeAction>();
foreach (var action in actions)
{
    action.Execute(arg);
}
container.Register(Component.For<ISomeAction>().ImplementedBy<ConcreteAction());

container.Register(Component.For().ImplementedBy如果您想使用.NET事件,那么Castle Windsor有一个有趣的功能:


如果有人需要它,以下是如何在StructureMap中执行此操作:

var container = new Container(_ =>
{
    _.Scan(x =>
    {
        x.TheCallingAssembly();
        x.WithDefaultConventions();
        x.AddAllTypesOf<IUpdateAction>();
    });
});

var actions = container.GetAllInstances<IUpdateAction>();

foreach (IUpdateAction action in actions)
{
    action.Execute(updatedItem);
}
var-container=新容器(\u=>
{
_.Scan(x=>
{
x、 装配件();
x、 使用默认约定();
x、 AddAllTypesOf();
});
});
var actions=container.GetAllInstances();
foreach(IUpdateAction操作中的操作)
{
action.Execute(updateItem);
}

谢谢你的回答。所以我只需要调用“container.Register(Component.for().implementedBy”这一行,这是选项之一。你也可以通过调用container.Register(Classes.fromthissembly().BasedOn());在lib中注册每个ISomeAction实现,更多信息请访问