我不能夠執行財產注入的自定義數據註釋驗證屬性Autofac財產注入System.ComponentModel.DataAnnotations ValidationAttribute
public class CustomValidationAttribute : ValidationAttribute
{
public ILogger Logger { get; set; }
public CustomValidationAttribute(string keyPointer)
{ }
public override bool IsValid(object value)
{
// Implementation here
return true;
}
}
現在,在我的MVC Application_Start方法中,我有以下Autofac配置:
// Autofac Ioc Container
var builder = new ContainerBuilder();
builder.RegisterType<Logger>().As<ILogger>().InstancePerHttpRequest();
builder.RegisterType<CustomValidationAttribute>()
.OnActivating(e =>
{
e.Instance.Logger = e.Context.Resolve<ILogger>();
});
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
我也曾嘗試自動連接功能:
builder.RegisterType<CustomValidationAttribute>().PropertiesAutowired();
我猜測數據註釋上屬性的屬性在編譯時被解析,並且不受運行時注入的影響。 此方法適用於MVC篩選器屬性,但不適用於數據註釋屬性。
任何幫助真的讚賞替代方法,使這項工作。
相關:http://stackoverflow.com/questions/5218333/asp-net-mvc3-set-custom-iserviceprovider-in-validationcontext-so-validators-can –
(對於其他讀者,我敢肯定你知道這一點)在編譯時「,將屬性序列化爲[有效]表示Assembly中二進制屬性和ctor參數的blob。在運行時,Reflection API會將這些內容挖出來,並通過執行大量定製的魔術來交付一個初始版本。通過'new'實例化是完全不同的事情。這裏的關鍵問題當然是沒有Autofac庫對事件進行事後注入,因此您嘗試的任何機制都不會執行任何操作。這留下了兩個途徑 - 「ValidationContext」和服務位置... –
相關:http://stackoverflow.com/questions/986019/database-injection-into-a-validation-attribute-with-asp-mvc-and-castle -windsor –