【发布时间】:2016-05-26 09:30:20
【问题描述】:
我正在使用新的 ASP.NET Core,目前正在创建一个我想从 JavaScript 前端调用的 API。
我想使用中介者模式来减少耦合,我从 Jimmy Bogard 那里找到了 Library MediatR。
我的问题在于使用 DI 中的构建将其连接起来,我尝试查看 examples,但看不到它是如何绑定到启动类中的 ConfigureServices 方法的。
有人有什么见解吗?
更新:我通过我的 ConfigureService 方法让它工作了:
services.AddScoped<SingleInstanceFactory>(p => t => p.GetRequiredService(t));
services.Scan(scan => scan
.FromAssembliesOf(typeof(IMediator), typeof(MyHandler.Handler))
.AddClasses()
.AsImplementedInterfaces());
【问题讨论】:
-
github.com/jbogard/MediatR/blob/master/samples/… 对我来说似乎很简单,但是对于程序集扫描,您需要这个 Scrutor 包(ASP.NET Core 的 DI 不附带程序集扫描,并且没有计划发布它)跨度>
-
如何将它添加到 ConfigureService 方法中?
services.AddTransient(typeof (IMediator), BuildMediator().GetType()); -
你不想那样注册它,Transient 意味着每次解决依赖关系时都会创建它。
services.AddScoped<SingleInstanceFactory>(p => t => p.GetRequiredService(t));和services.AddScoped<MultiInstanceFactory>(p => t => p.GetRequiredServices(t));是工厂方法,它们被注入到调解器中并解决通知(多)或请求(单) -
IMediator本身可以注册为services.AddScoped<IMediator,Mediator>(),因为它具有公共构造函数,并且代表已在上一步中注册。在示例中,最后一个是通过 Scrutor 扫描自动完成的 -
@Tseng 我自己的答案是否与您的答案相符?
标签: c# asp.net asp.net-core mediatr