使用 MVC ValidationAttribute 进行 Autofac 属性注入

Thu*_*Dev 5 c# asp.net-mvc inversion-of-control autofac data-annotations

我发现了关于这个主题的几个问题,但还没有找到一个干净简单的解决方案。

这就是我正在做的(使用 Autofac 3.3.0)注册

builder.RegisterType<MerchantRepo>().As<IMerchantRepo>().PropertiesAutowired();
Run Code Online (Sandbox Code Playgroud)

这是我的验证类

public class MerchantMustBeUniqueAttribute : ValidationAttribute
{
    public IMerchantRepo MerchantRepo { get; set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        int merchantId = Convert.ToInt32(value);

        if (MerchantRepo.Exists(merchantId))
        {
            return new ValidationResult(ErrorMessage);
        }
        else
        {
            return ValidationResult.Success;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的商家回购始终为空。

编辑:

这是我的视图模型的一部分

public class MerchantCreationModel
{
    [Required]
    [MerchantMustBeUnique(ErrorMessage = "Already exists!")]
    public int? NewMerchantId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

自动注册

public static void RegisterDependencies()
{
    var builder = new ContainerBuilder();

    builder.RegisterFilterProvider(); // Inject properties into filter attributes
    builder.RegisterControllers(typeof(MvcApplication).Assembly);

    builder.RegisterType<MerchantRepo>().As<IMerchantRepo>().PropertiesAutowired();

    IContainer container = builder.Build();
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
Run Code Online (Sandbox Code Playgroud)

Thu*_*Dev 3

我使用DependencyResolverASP.NET MVC 中的类解决了我的问题。

IMerchantRepo repo = DependencyResolver.Current.GetService<IMerchantRepo>();
Run Code Online (Sandbox Code Playgroud)