【问题标题】:Need help implementing Command Handlers/Bus using Unity DI需要帮助使用 Unity DI 实现命令处理程序/总线
【发布时间】:2012-04-04 19:55:27
【问题描述】:

各位, 我正在尝试将遗留的棕地应用程序重构为带有命令和用于域修改的命令总线的 CQRS 架构。

该应用程序很可能在 Asp.Net MVC3 中实现。我的雇主更喜欢在 MVC 应用程序中使用 Unity for DI。

我能找到的任何显示命令/总线解析的依赖容器的示例都是基于 Structuremap 或 Autofac,但是我需要在此实现中使用 Unity。有没有人以这种方式使用过 Unity 或知道任何示例?

【问题讨论】:

标签: dependency-injection unity-container structuremap cqrs


【解决方案1】:

您认为您究竟在哪里需要容器?也许this post 包含一些有用的信息。

它描述了一种与容器无关的命令处理方式。


更新

你的意思是你想要这样的东西:

var builder = new ConfigurationBuilder();
var convention = new CommandHandlerConvention().WithTransaction().WithDeadlockRetry();
builder.Extension<DecoratorExtension>();
builder.Scan(x =>
{
    x.With(convention);
    x.AssemblyContainingType(typeof(BarCommand));
});
var container = new UnityContainer();
container.AddExtension(builder);
ICommandHandler<BarCommand> barHandler = container.Resolve<ICommandHandler<BarCommand>>("BarHandler");
var command = new BarCommand();
barHandler.Handle(command);
Assert.AreEqual("-->Retry-->Transaction-->BarHandler", command.HandledBy);

该注册使用 Unity 的自定义配置引擎,该引擎提供了 StructureMap 配置的许多功能。


更新2

代码示例是我的pet project on codeplex 的一部分。上面的 sn-ps 可以在 TecX.Unity.Configuration.Test 项目中找到。

【讨论】:

  • 虽然 Mark Seemann 的文章清楚地展示了如何构建消息调度架构,展示了如何防止 Service Locator 反模式,它本身就非常有趣,并且在不使用容器的情况下展示了这一点,这可能会不帮助OP。在处理围绕通用接口(例如ICommandHandler&lt;T&gt;IEventHandler&lt;T&gt;)设计的应用程序时,几乎不可能在没有容器的情况下保持组合根的可维护性。手动接线简直太痛苦了。所以 OP 的问题仍然存在:如何使用 Unity 做到这一点?
  • @Sebastian 我正在寻找一种简单且易于管理的方法来连接命令和命令处理程序。一个简单的同步总线可能是一种可行的方法,但我看到的 NServiceBus 等实现对我来说太过分了。
  • @Steven 请看我的更新。顺便说一句:OP是什么意思?
  • OP 的意思类似于“原始海报”,或者至少指的是提出问题的人。我不知道这是从哪里来的,但是这个缩写在 SO,Stackoverflow 中被大量使用;-)
  • ConfigurationBuilderCommandHandlerConventionDecoratorExtension 是 Unity 的一部分吗?如果不是,它们来自哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
相关资源
最近更新 更多