簡體   English   中英

無法解析泛型類的類型服務

[英]Unable to resolve service for type for generic class

我正在使用FluentValidation並創建了一個通用類,如下所示:

public class GenericValidator<T>: AbstractValidator<T>
{
    protected override bool PreValidate(ValidationContext<T> context, ValidationResult result)
    {
        if (context.InstanceToValidate != null) return true;

        result.Errors.Add(new ValidationFailure("model", Resources.NullModelError));

        return false;
    }
}

當我嘗試使用我的應用程序時,它返回了這個錯誤:

System.InvalidOperationException:嘗試激活“Api.Controllers.Strategies.Handlers.StrategySaveHandler”時無法解析“Api.Controllers.Strategies.StrategyValidator”類型的服務。

我的StrategyValidator如下所示:

public class StrategyValidator : GenericValidator<StrategyViewModel>
{
    public StrategyValidator()
    {
        RuleFor(model => model.Url).NotEmpty();
    }
}

我為不同的實體提供了其中一些,我想將它們全部注冊。 我嘗試了幾種方法:

services.AddSingleton(typeof(GenericValidator<>));

services.AddSingleton(typeof(GenericValidator<>), typeof(GenericValidator<>));

services.AddSingleton(typeof(AbstractValidator<>));

services.AddSingleton(typeof(GenericValidator<>), typeof(AbstractValidator<>));

他們都沒有工作。 有誰知道我可以做些什么來注冊我所有的驗證器而不是一個一個地注冊它們?

您還沒有提供需要 DI 的服務是什么樣的,但您可以像這樣手動注冊驗證器: services.AddSingleton(typeof(StrategyValidator))

此外,你可能只是想利用你的服務的通用形式,例如,而不是請求StrategyValidator你應該要求GenericValidator<StrategyViewModel>

但一般來說,Fluent 提供了一種使用其擴展方法來做到這一點的簡單方法

例如

services.AddMvc(config =>
{
    config.Filters.Add(new AuthorizeFilter(authorizationPolicy));
}).AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>())

注意:這將注冊與 Startup 位於同一程序集中的所有流暢驗證器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM