- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法对自定义数据注释验证属性执行属性注入(inject)
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));
我也试过 Autowiring 功能:
builder.RegisterType<CustomValidationAttribute>().PropertiesAutowired();
我猜测数据注释上的属性属性在编译时解析并且不受运行时注入(inject)的影响。此方法适用于 MVC 过滤器属性,但不适用于数据注释属性。
对于使这项工作可行的替代方法,我们非常感谢任何帮助。
最佳答案
作为引用,我们遇到了一个 ValidationAttribute 问题,它需要使用 Repository 做一些数据库工作,而 Repository 又使用 Entity Framework DbContext。
我们的问题是 DbContext 被属性缓存了。这导致其中包含的数据过时,从而影响了验证结果!
我们通过在 IsValid 方法内的 Autofac Lifetimescope 声明中执行 Repository resolve 来修复它:
using Autofac;
...
public override bool IsValid(object value)
{
using (var lifetimeScope = MvcApplication.Container.BeginLifetimeScope())
{
var repo = lifetimeScope.Resolve<IMyRepo>();
// Do your validation checks which require the repo here
} // The repo will be released / disposed here
}
只是在此处添加我的解决方案,因为我没有在其他任何地方找到针对此问题的解决方案 - 也许很明显没有其他人像我一样愚蠢:)
关于c# - Autofac 属性注入(inject) System.ComponentModel.DataAnnotations ValidationAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12667326/
有人可以指向我介绍该新 namespace 的网络广播或教程/视频,以及如何使用它来帮助验证诸如用户输入之类的数据吗? 最佳答案 试试这个(对不起,不是视觉上的): ASP.NET MVC Tip #
是否可以序列化(二进制)System.ComponentModel.Container? 最佳答案 不,它没有标记为可序列化。 关于c# - 序列化 ComponentModel.Container?
我正在 ASP.NET 中创建自定义 UserControl,我正在使用 System.ComponentModel.Attributes 用不同的东西装饰属性。默认情况下,ASP.NET 显示所有公
我有一个接受任何对象的函数,然后它从作为输入的属性或字段中获取值。 目前看起来是这样的: private string GetFieldValue(object o, Field f) { //fi
我在理解容器/组件模型如何在 C# 中相互交互时遇到一些困难。我知道组件如何包含一个站点对象,该对象包含有关容器和组件的信息。但是,假设我有以下代码: using System; using Syst
我正在使用程序集绑定(bind),但仍然收到此错误: 无法加载文件或程序集“System.ComponentModel.Annotations,Version=4.2.1.0,Culture=neut
我遇到了一个难以诊断的奇怪问题。将包含命名空间 Matrix.System 的程序集引用添加到 Windows 服务项目后,我现在在编译服务时遇到此错误: The type or namespace
我有一个 .Net Core 3.0 windows 桌面简单项目,它引用了以下 NuGet 包: Microsoft.NETCore.Platforms(3.0.0-preview.3.19128.
我的设计时组件中有许多类别默认展开。 我想让它们默认显示为折叠状态,或者至少在用户看到它们之前有问题地折叠它们。 [Category("Misc")] public int Id { // .
有人能解释一下我们何时以及为什么应该使用 System.ComponentModel.Container 吗?最近我遇到了这个类的使用 here ,但真的不明白有什么好处可以让我们上这门课。 最佳答案
我正在尝试清除我的 C# 项目中的一些警告,其中有几个警告说: Warning 1 The field 'Namespace.Class.components' is assigned but its
我在枚举中使用 Description 属性为枚举字段提供用户友好的名称。例如 public enum InstallationType { [Description("Forward of
我正在尝试在我的 WPF 项目中使用 DataAnnotations 来指定字符串的最大长度,如下所示: using System.ComponentModel.DataAnnotations; 但是
我正在使用 MVC 4、.net 4 和 Entity Framework 6。我的项目正在我的开发机器上构建,该机器安装了 Visual Studio 2010,但在我的构建服务器上我遇到了命名空间
我正在尝试使用 System.ComponentModel.DesignerCategory 防止扩展标签页组件在设计器中自动打开的属性。关于其他 StackOverflow 问题的建议 1 , 2
我刚刚开始使用Caliburn.Micro,它说要导入 System.ComponentModel.Composition.Initialization 在 System.ComponentModel
我正在使用带有 POCO 的 Entity Framework 4 制作 MVC 3 应用程序。我想尽可能多地注释我的所有实体。我遇到了一个问题,但是我找不到关于每个属性含义的好的文档。有些非常直接,
我有一个 View 模型,其中属性具有显示名称。我现在正在制作一个 Excel 工作表,其中包含与网页中的网格相同的数据。我正在使用 closed xml (使用 openxml)在服务器上创建 Ex
我正在尝试将我在 archlinux 上的 monodevelop 中制作的应用程序捆绑在一起。 在 monodevelop 中构建应用程序后,我将使用以下命令打包: mkbundle --deps
我正在尝试在我的系统中实现多语言支持,工作中的其他系统为此使用从他们已经使用了一段时间的数据库生成的 xmlfiles,所以他们希望我也使用它。 我已经设法翻译了我的表单模型中除显示名称之外的所有内容
我是一名优秀的程序员,十分优秀!