gpt4 book ai didi

asp.net-mvc-2 - 如何在 Ninject 中为 MVC 中的 ValidationAttribute 进行属性注入(inject)?

转载 作者:行者123 更新时间:2023-12-02 00:40:26 25 4
gpt4 key购买 nike

我设置了一个验证属性,我需要访问数据库才能完成验证。我尝试以与项目其他地方相同的方式设置属性注入(inject),但它不起作用。我缺少哪一步?

public class ApplicationIDValidAttribute : ValidationAttribute
{
[Inject]
protected IRepository<MyType> MyRepo;

public override bool IsValid(object value)
{
if (value == null)
return true;

int id;
if (!Int32.TryParse(value.ToString(), out id))
return false;

// MyRepo is null here and is never injected
var obj= MyRepo.LoadById(id);
return (obj!= null);
}

还有一点要指出,我将 Ninject 内核设置为注入(inject)非公共(public)属性,所以我认为这不是问题所在。我正在使用 Ninject 2、MVC 2 和 Ninject.Web.MVC 的 MVC 2 版本。

谢谢!

最佳答案

根据这个post通过 author Ninject 的:

Field injection: Ninject 2’s injection is now driven by expression trees, and in .NET 3.5 there is no way to set field values with an expression tree. Since this is a bad practice anyway, I decided to cut it.

其次,据我所知,在 MVC2 中默认属性不是通过控制容器的反转构造的,所以即使 Ninject 支持字段注入(inject),这仍然行不通。

一个简单的解决方案是在属性构造函数中使用 ServiceLocator,如下所示:

public ApplicationIDValidAttribute()
{
MyRepo = ServiceLocator.Current.GetInstance<IRepository<MyType>>();
}

如果您不熟悉服务定位器,您可以在 codeplex 上找到相关信息.描述了第二种稍微难一点的方法,它并不意味着使用服务定位器 here .

关于asp.net-mvc-2 - 如何在 Ninject 中为 MVC 中的 ValidationAttribute 进行属性注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com