天道酬勤,学无止境

custom-attributes

通过自定义属性生成附加代码(Generating additional code through a custom attribute)

问题 我对 C# 还是很陌生,我有一个关于属性的问题。 是否可以编写在编译时生成附加代码的自定义属性。 例如: [Forever] public void MyMethod() { // Code } 变成: public void MyMethod() { while (true) { // Code } } 回答1 开箱即用,不,这不是可以做到的。 不过,使用 PostSharp 可以实现: http://www.sharpcrafters.com/aop.net/compiletime-weaving 回答2 Afterthought 通过对程序集执行编译时修改与 PostSharp 类似。 在 Afterthought 的情况下,您可以选择如何识别要进行的更改,方法是查找已定义的属性、查找常见模式或简单地建立约定。 例如,我正在研究一个示例,该示例使用 Afterthought 在编译时为已编译程序集中 DbContext 公开的类型自动实现实体框架接口。 在这种情况下,我只是查找作为 DbContext 子类的任何类型,然后查看此类型的属性以确定要修改哪些 POCO 类型以与实体框架一起使用。 然而,像这样的程序集的编译时操作虽然功能强大,但对我来说仍然是最后的选择。 .NET 框架和 Microsoft 工具本身并不支持它。 虽然我编写 Afterthought

2022-01-16 10:12:44    分类:技术分享    c#   .net   attributes   custom-attributes

Generating additional code through a custom attribute

I am still fairly new to C# and I have a question regarding attributes. Is it possible to write a custom attribute which generates additional code at compile time. For example: [Forever] public void MyMethod() { // Code } Turns into: public void MyMethod() { while (true) { // Code } }

2022-01-15 20:43:53    分类:问答    c#   .net   attributes   custom-attributes

如何开发一个接受登录名或令牌的自定义 AuthorizeAttribute?(How can I develop a custom AuthorizeAttribute that accepts a login OR a token?)

问题 在我的 MVC 5 应用程序中,我按如下方式装饰我的控制器: [Authorize] public class Controller { .. 但是,我的一个要求是使用令牌来授权操作而无需进入登录屏幕。 即: http://{website}/Action?token={/* token for this user */} 因此,我如何开发一个接受登录(默认行为)或令牌(自定义,必需行为)的自定义 AuthorizeAttribute? 换句话说,如果我使用http://{website}/Action ,我将被重定向到登录屏幕(如果我没有被授权),但如果我使用http://{website}/Action?token={/* token for this user */} ,我将被授权并重定向到所述操作。 [TokenAuthorize]类 public class TokenAuthorize : AuthorizeAttribute { private const string SecureToken = "token"; public override void OnAuthorization(AuthorizationContext filterContext) { if (Authorize(filterContext)) { return; }

2022-01-13 15:54:29    分类:技术分享    c#   asp.net-mvc-5   authorization   custom-attributes

数据注释 - 使用属性扩展并将正则表达式存储在资源文件中(Data Annotations - using an attribute extension and storing regular expressions in a resource file)

问题 我目前正在使用MVC4数据注释来处理验证。 我正在一个非常国际化的网站上工作,因此我将所有文本都保存在资源文件中。 我还想在资源文件中保留用于验证的正则表达式,这样我就可以使用相同的代码来检查,例如邮政编码(英国)和邮政编码(美国),只需使用不同的 RegEx(以及不同名称的资源等) )。 我有以下属性,它已经从资源文件中提取错误消息。 我怎样才能让它从资源文件中获取正则表达式? [RegularExpression(@"^[\w]{1,2}[0-9]{1,2}[\w]?\s?[0-9]{1,2}[\w]{1,2}$", ErrorMessageResourceType = typeof(Resources.ValidationMessages), ErrorMessageResourceName = "validPostcode")] 编辑(再次) 我现在在哪里 按照下面的答案和一些额外的搜索,我有以下内容: 在Global.asax.cs我添加了以下行以确保调用客户端验证 DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalisedAttribute), typeof(RegularExpressionAttributeAdapter)); 在我的模型中,我调用了属性扩展 [Localised

2022-01-12 01:32:36    分类:技术分享    asp.net   asp.net-mvc   asp.net-mvc-4   data-annotations   custom-attributes

How can I develop a custom AuthorizeAttribute that accepts a login OR a token?

In my MVC 5 application, I decorate my controllers as follows: [Authorize] public class Controller { .. However, one requirement I have is to use a token to authorize an action without going to the login screen. ie: http://{website}/Action?token={/* token for this user */} Thus, how can I develop a custom AuthorizeAttribute that accepts a login (default behavior) OR a token (custom, required behavior)? In other words, if I use http://{website}/Action, I would be redirected to the login screen (if I am not authorized), but if I use http://{website}/Action?token={/* token for this user */}, I

2022-01-11 13:44:03    分类:问答    c#   asp.net-mvc-5   authorization   custom-attributes

Is it possible to add attributes to the generated members of an ExpandoObject instance?

I'm trying to use an ExpandoObject as the SelectedObject of a PropertyGrid. I know how to add the properties I want to the ExpandoObject: public dynamic MakePropertyObject() { dynamic expando = new ExpandoObject(); var dictionary = expando as IDictionary<string, object>; foreach(MyClass m in PropertiesINeedToAdd) dictionary[m.Name] = m.Value; return expando; } This code's working fine- the debugger shows the names and values of expando's properties as expected. However, none of the generated properties is showing up in the PropertyGrid when I set the return value of MakePropertyObject() to its

2022-01-09 07:07:27    分类:问答    .net   propertygrid   custom-attributes   expando   expandoobject

Data Annotations - using an attribute extension and storing regular expressions in a resource file

I am currently working with MVC4 data annotations to handle validation. I am working on a site that will be very much international and as such I keep all of my text in resource files. I also want to keep regular expressions for validation in resource files so I can use the same code to check, for example, Post Codes (UK) and Zip Codes (US) just by using a different RegEx (and resources for the different names etc). I have the below attribute which is already pulling the error message from a resource file. How can I have it get the regex from a resource file too? [RegularExpression(@"^[\w]{1,2

2022-01-08 22:55:34    分类:问答    asp.net   asp.net-mvc   asp.net-mvc-4   data-annotations   custom-attributes

MVC3 - Where to place custom attribute classes

I am delving into custom validation attributes and am curious to know how others structure the projects. Where do you typically store custom attributes? My first thought was to simply create a new folder and be done with it. Any suggestions?

2022-01-08 02:40:20    分类:问答    asp.net-mvc-3   custom-attributes

未命中自定义属性(Custom Attribute not being hit)

问题 我创建了一个自定义属性,当它被击中时写入控制台,但它似乎没有被击中。 这是 microsoft 教程 (http://msdn.microsoft.com/en-us/library/sw480ze8.aspx) 并且正在 2010 年 .net 4 上运行。我猜一定是我做错了什么,但是我看不出它是什么。 任何人都可以帮忙吗? 这是属性,其代码永远不会被命中 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public class Author : Attribute { private string _name; private double _version; public Author(string name) { Console.WriteLine(string.Format("author {0} was just created", name)); _name = name; _version = 1.0; } } 这是使用它的类 - 它成功地在构造函数中写出代码: /// <summary> /// TODO: Update summary. /// </summary> [Author("P. Ackerman")] public class Ackerman {

2021-12-24 16:22:28    分类:技术分享    c#-4.0   aop   custom-attributes   custom-attribute

Windows 7:属性处理程序在资源管理器中有效,但在 FileOpenDialog 中无效?(Windows 7: Property Handler works in Explorer but Not FileOpenDialog?)

问题 正在为我们在 Windows 7 中的自定义文件类型编写自定义属性处理程序。我已经安装了 Windows 7 SDK 并构建了示例属性处理程序。 注册处理程序后,它在 Windows 资源管理器中运行良好,但在公共文件打开对话框中不会出现自定义值。 有谁知道我是否需要做一些特殊的事情才能让属性出现在公共对话框中? 探险家: 文件打开对话框: 回答1 好的,想通了。 这是交易。 我的应用程序是 32 位的,我在 x64 系统上。 因为 PropertyHandler 是用 x64 编写的,以支持 shell 进程外。 但是对于文件打开对话框,它需要在进程内运行,因此 x64 dll 无法运行。 我通过创建一个快速的 x64 应用程序确认了这一点,文件打开对话框的工作方式与操作系统相同。 希望这可以帮助我以后的其他人,讨厌回答我自己的问题,但不希望人们在我找到解决方案时在这个问题上浪费 NRG。

2021-12-24 12:51:34    分类:技术分享    shell   windows-7   custom-attributes   common-dialog