c# - 使用 ASP MVC 和 CaSTLe Windsor 将数据库注入(inject)验证属性

标签 c# asp.net-mvc castle-windsor

我需要一些帮助 - 我正在尝试在需要进行数据库调用的 ASP.NET MVC Web 项目中使用自定义验证属性。

我让 windsor 成功地为 Controller 工作,并且 IRepository 接口(interface)正常注入(inject)。当我需要将存储库注入(inject)属性类时,问题就出现了。

属性类有如下代码:

public class ValidateUniqueUrlNodeAttribute : AbstractValidationAttribute
{
    private readonly string message;
    private readonly IArticleRepository articleRepository;

    public ValidateUniqueUrlNodeAttribute(string message)
    {
        this.message = message;
    }

    public ValidateUniqueUrlNodeAttribute(string message, IArticleRepository articleRepository):this(message)
    {
        this.articleRepository = articleRepository;
    }
    public override IValidator Build()
    {
        var validator = new UniqueUrlNodeValidator(articleRepository) { ErrorMessage = message };

        ConfigureValidatorMessage(validator);

        return validator;
    }

我的问题是我似乎无法让 Windsor 拦截要传入 IArticleRepository 的属性的构造

我的global.asax文件中的当前代码如下:

container = new WindsorContainer();
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(Container));
   container
     .RegisterControllers(Assembly.GetExecutingAssembly())
     .AddComponent<IArticleRepository, ArticleRepository>()
     .AddComponent<ValidateUniqueUrlNodeAttribute>();

如有任何帮助,我们将不胜感激。

最佳答案

据我所知,没有依赖注入(inject)容器可以直接管理一个属性,因为它是由运行时实例化的,没有办法拦截它。

但是,他们可以作弊:

  1. 使用容器的静态网关(example),或者
  2. 使用“BuildUp”功能注入(inject)在已构建对象中找到的任何依赖项。这叫做 BuildUp in UnityInjectProperties in Autofac .

Windsor 不支持 #2(ref1ref2),因此您可以:

  1. 尝试其中一种让 Windsor 支持 #2(hack1hack2)的技巧
  2. 使用 static gateway
  3. 实现您自己的 IValidatorBuilder并让它使用 Windsor 创建验证器。我确定这是在某个地方实现的,但我现在找不到它...

关于c# - 使用 ASP MVC 和 CaSTLe Windsor 将数据库注入(inject)验证属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986019/

相关文章:

c# - CaSTLe Windsor 拦截器和按约定注册

.net - 温莎城堡 : Clearing the container

c# - Console.ReadLine() 最后没有换行符?

c# - asp.net MVC 4 模型 [Key] 属性无法识别

asp.net-mvc - ASP.NET MVC。如何创建接受和 multipart/form-data 的 Action 方法

c# - Mvc 5 属性路由

.net - 温莎城堡有什么缺点吗?

c# - 不使用 OpenIddict 接收刷新 token

c# - 将代码中的 userid 和 guid 提供给 signalr 服务器

c# - C#应用程序无法访问kubernetes服务?