相关疑难解决方法(0)

ASP.NET核心模型绑定错误消息本地化

我正在使用ASP.NET Core,并尝试本地化应用程序.我设法使用新的 asp .net核心资源来本地化控制器和视图,并使用资源来本地化错误消息以进行模型验证.但是,当错误消息未链接到模型字段注释(如"必需")并且模型绑定的数据不正确时(如预期数字的文本),我收到如下错误,我是无法本地化:

"值'abc'对ID无效."

当我进入abcID房地产View,因为模型绑定无法做到的领域,它显示为近场验证消息,称"值'ABC’是无效的ID." .这是我正在使用的课程:

public class Country : IHasID
{
    public int ID { get; set; }

    [Required(ErrorMessageResourceType = typeof(L.Val),
    ErrorMessageResourceName = "NameR")]
    [MaxLength(100, ErrorMessageResourceType = typeof(L.Val), 
    ErrorMessageResourceName = "Max")]
    public string Name { get; set; }

    /*Some other properties*/
}
Run Code Online (Sandbox Code Playgroud)

我在互联网上发现的类似问题要么针对较旧的asp .net版本,否则无法解决问题.

.net c# localization asp.net-core asp.net-core-localization

21
推荐指数
2
解决办法
2万
查看次数

ASP.NET 核心在单例服务上调用异步初始化

我有一个服务,它在一个名为的方法中从文件中异步读取一些内容 InitAsync

public class MyService : IService {
    private readonly IDependency injectedDependency;

    public MyService(IDependency injectedDependency) {
        this.injectedDependency = injectedDependency;
    }

    public async Task InitAsync() {
        // async loading from file.
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这个服务被注入到我的控制器中。

public class MyController : Controller {
    private readonly IService service;

    public MyController(IService service) {
        this.service = service;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想要一个 MyService 的单例实例。我想在启动时调用 InitAsync。

public class Startup {
    public void ConfigureServices(IServiceCollection services) {
        ......
        services.AddSingleton<IService, MyService>();
        var serviceProvider = services.BuildServiceProvider();
        // perform async init.
        serviceProvider.GetRequiredService<IService>().InitAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是在启动时,创建并 …

c# dependency-injection asp.net-core

15
推荐指数
1
解决办法
5612
查看次数

从应用程序代码调用“BuildServiceProvider”会导致复制单例警告。我如何避免这种情况?

我刚刚从另一个项目的最后粘贴了 4 行,它可以工作,但我收到警告..我显然不太了解 DI ......它想让我改变什么?

  public void ConfigureServices(IServiceCollection services)
        {
            if (HostingEnvironment.EnvironmentName == "Local")
            {
                services.AddHealthChecksUI()
               .AddHealthChecks()
               .AddCheck<TestWebApiControllerHealthCheck>("HomePageHealthCheck")
               .AddCheck<DatabaseHealthCheck>("DatabaseHealthCheck");
            }

        services.Configure<PwdrsSettings>(Configuration.GetSection("MySettings"));
        services.AddDbContext<PwdrsContext>(o => o.UseSqlServer(Configuration.GetConnectionString("PwdrsConnectionRoot")));

        services.AddMvc(o =>
        {
            o.Filters.Add<CustomExceptionFilter>();
        });

        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy", b => b
                .SetIsOriginAllowed((host) => true)
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        });

        services.AddSwaggerDocument();
        services.AddHttpContextAccessor();

        services.AddAutoMapper(typeof(ObjectMapperProfile));
        services.AddTransient<IEmailSender, EmailSender>();
        services.AddScoped(typeof(IAppLogger<>), typeof(LoggerAdapter<>));
        services.AddScoped(typeof(IAsyncRepository<>), typeof(Repository<>));
        services.AddScoped<IRfReportTypeRepository, RfReportTypeRepository>();
        services.AddScoped<IRfReportRepository, RfReportRepository>();
        services.AddScoped<IRfReportLookupsService, RfReportLookupsService>();
        services.AddScoped<IRfReportService, RfReportService>();

        services.Configure<RAFLogging>(Configuration.GetSection("RAFLogging"));
        ServiceProvider serviceProvider = services.BuildServiceProvider(); //WARNING IS HERE
        IOptions<RAFLogging> RAFLogger = serviceProvider.GetRequiredService<IOptions<RAFLogging>>();
        RegisterSerilogLogger logger = new RegisterSerilogLogger(RAFLogger);
    }
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection asp.net-core

13
推荐指数
1
解决办法
9062
查看次数

为什么每次都需要调用 BuildServiceProvider 来获取依赖?

在 my 上注册实例后IServiceCollection,我需要注册一个IAutomapperProvider依赖于IAssemblyProvider在此方法调用之前注册的

public static IServiceCollection RegisterAutomapperConfiguration(this IServiceCollection container, ServiceLifetime lifeTime = ServiceLifetime.Scoped)
{
        //creating the provider to get the IAssemblyProvider for my IAutomapperProvider
        var prov = container.BuildServiceProvider();
        var assemblyProvider = prov.GetService<IAssemblyProvider>();
        container.Register<IAutomapperProvider>(aProv => new AutomapperProvider(assemblyProvider), lifeTime);
        var autoMapperProvider = prov.GetService<IAutomapperProvider>();
        var mapperConfig = autoMapperProvider.GetMapperConfiguration();
        ...
}
Run Code Online (Sandbox Code Playgroud)

如果在调用之后container.Register<IAutomapperProvider>(aProv => new AutomapperProvider(assemblyProvider), lifeTime); 我不再调用 BuildServiceProvider,那么我就不会得到我之前注册的 IAutomapperProvider

public static IServiceCollection RegisterAutomapperConfiguration(this IServiceCollection container, ServiceLifetime lifeTime = ServiceLifetime.Scoped)
{
        //creating the provider to get the IAssemblyProvider …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection ioc-container asp.net-core

5
推荐指数
1
解决办法
1万
查看次数