我正在尝试使用 .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,我尝试添加它然后构建(不起作用),然后删除它并构建(不起作用),但问题仍然存在,所以它与那个。
我尝试过类似的事情
builder.Services.Microsoft.Extensions.DependencyInjection.MediatorDependencyInjectionExtensions.AddMediator(options =>
{
options.ServiceLifetime = ServiceLifetime.Transient;
});
但这不起作用,还重新启动了VS。如何解决这种歧义。错误消息有点令人困惑,看起来参考完全一样,有人遇到过类似的问题。
从 Mediator GitHub 自述文件中获取此内容,这为我解决了这个问题:
- 使用和抽象...您将源生成器包安装到您的边缘/最外层项目(即ASP.NET Core应用程序, 后台工作者项目),然后使用 Mediator.Abstractions 包无论您在何处定义消息类型和处理程序。