【问题标题】:How to decouple MediatR from my business layer如何将 MediatR 与我的业务层分离
【发布时间】:2018-05-26 06:27:24
【问题描述】:

早上好。

我在我的项目中使用域事件,我发现实现它的最简单方法是使用 MediatR。 但我不希望我的项目直接依赖它,我想应用依赖反转来隐藏库。

由于 INotification 接口,当前代码在 Mediator 中有依赖项

public class EmailConfirmedEvent : INotification
{
    public Guid PassengerId { get; }
    public string Email { get; }

    public EmailConfirmedEvent(Guid passengerId, string email)
    {
        Email = email;
        PassengerId = passengerId;
    }
}

但我想变成这样:

public class EmailConfirmedEvent : IMyProjectDomainEvent
{
    public Guid PassengerId { get; }
    public string Email { get; }

    public EmailConfirmedEvent(Guid passengerId, string email)
    {
        Email = email;
        PassengerId = passengerId;
    }
}

通过某种方式,我需要将中介事件/事件处理程序“转换”为我的项目事件/事件处理程序。

最好的方法是什么。 提前致谢。

【问题讨论】:

  • 您最终将不得不创建自己的 MediatR 版本。这是一个很大的努力。权衡是否值得?
  • 嗯,我正在考虑我最终会切换库的未来。我不想重新创建事件调度库,我只想从我的代码中抽象出 MediatR

标签: .net-core mediatr


【解决方案1】:

我最终使用 StructureMap 和反射创建了我的域事件自定义代码,以在运行时解析事件处理程序。 此处的代码示例:https://github.com/Henry-Keys/domain-events-sample

【讨论】:

  • 这有助于“抽象化”Mediatr。我需要使用 .NET Core 的内置 IServiceProvider 和下面的 Lamar 来做同样的事情。
  • 您的 Github 链接已损坏。你能更新一下吗?把你的代码放在这里?
【解决方案2】:

我通常创建从 MediatR 接口/基类继承的基类。然后,如果您更改库(不太可能),您只需更新基类,其余的实现保持不变。

【讨论】:

  • 这是个好主意,我会考虑的。谢谢。
  • 我使用了另一种方法,朋友,抱歉回答晚了
猜你喜欢
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多