注册中介器源生成器,中介器之间的模糊调用 Microsoft.Extensions.DependencyInjection

问题描述 投票:0回答:1

我正在尝试使用 .NET 中引入的源生成器功能来注册调解器模式的以下 .NET 实现mediatrsourcegenerator

我安装了所需的软件包 dotnet 添加包 Mediator.SourceGenerator --version 2.0。 dotnet 添加包 Mediator.Abstractions --version 2.0.**

var builder = WebApplication.CreateBuilder(args);
    
//DI
builder.Services.AddScoped<IRepository, Repository>();
builder.Services.AddScoped<IDocumentService, DocumentService>();
builder.Services.AddScoped<ICacheService, CacheService>();


builder.Services.AddScoped<IValidationService, ValidationService>();

builder.Services.AddAutoMapper(typeof(Program));

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddMediator(options =>
{
    options.ServiceLifetime = ServiceLifetime.Transient;
});

即使源生成器成功生成文件,我在构建应用程序时也会收到以下错误。

严重性代码描述项目文件行抑制状态 错误 CS0121 以下方法或属性之间的调用不明确:“Microsoft.Extensions.DependencyInjection.MediatorDependencyInjectionExtensions.AddMediator(Microsoft.Extensions.DependencyInjection.IServiceCollection, System.Action)”和“Microsoft.Extensions.DependencyInjection.MediatorDependencyInjectionExtensions.AddMediator( Microsoft.Extensions.DependencyInjection.IServiceCollection、System.Action

我根本没有安装包 Microsoft.Extensions.DependencyInjection,我尝试添加它然后构建(不起作用),然后删除它并构建(不起作用),但问题仍然存在,所以它与那个。

我尝试过类似的事情

builder.Services.Microsoft.Extensions.DependencyInjection.MediatorDependencyInjectionExtensions.AddMediator(options =>
{
    options.ServiceLifetime = ServiceLifetime.Transient;
});

但这不起作用,还重新启动了VS。如何解决这种歧义。错误消息有点令人困惑,看起来参考完全一样,有人遇到过类似的问题。

c# .net mediator
1个回答
0
投票

从 Mediator GitHub 自述文件中获取此内容,这为我解决了这个问题:

  1. 使用和抽象...您将源生成器包安装到您的边缘/最外层项目(即ASP.NET Core应用程序, 后台工作者项目),然后使用 Mediator.Abstractions无论您在何处定义消息类型和处理程序
© www.soinside.com 2019 - 2024. All rights reserved.