c# - 如何访问自定义 ValidationAttribute 中的存储库?

标签 c# dependency-injection repository-pattern autofac

public class UniqueNameAttribute : ValidationAttribute
{
    private const string UniqueNameViolationMessage = "This name is already taken. Please select another.";

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        //return somerepo.IsUniqueName(name)
        //how do I get access to repo here?  Tried DI with autofac but it came out as null
    }
}

我正在使用依赖项注入(inject)将存储库注入(inject)到我的 Web API 中。但是,我似乎无法注入(inject) ValidationAttribute。如果我尝试注入(inject),结果为空。我正在为 DI 使用 Autofac。还有其他方法可以访问我的存储库吗?

请注意,我只使用 Web API,而不是 MVC,所以我不能使用 MVC DependencyResolver。

builder.RegisterType<MyRepository>().As<IMyRepository>().InstancePerRequest();

var container = builder.Build();
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver((IContainer)container); ;

最佳答案

我猜你错过了这一行:

var builder = new ContainerBuilder();
builder.RegisterWebApiFilterProvider(config);
var container = builder.Build();

而不是从 IActionFilter 继承,而是从 IAutofacActionFilter 继承。

此处有更多详细信息:https://autofaccn.readthedocs.io/en/latest/integration/webapi.html#provide-filters-via-dependency-injection

关于c# - 如何访问自定义 ValidationAttribute 中的存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31599448/

相关文章:

c# - 语法问题 : Can't Change BackGround Of Particular button?

c# - 重新抛出无参数 catch 和什么都不做的区别?

c# - 构造函数不能调用自己

domain-driven-design - 可以将 Datacontext 设置为存储库中的属性吗?

design-patterns - 什么是聚合根?

c# - 如何在 Xamarin.Forms 中制作可绑定(bind)标记扩展

c# - 文字换行字符

c# - Azure Function(使用 DI)无法删除 "/api"路由前缀

c# - 什么是 ObjectFactory.Inject 在 StructureMap 3.0 中的等价物

java - 当重写 spring 存储库方法而不实现时会发生什么