所以我有一个案例,我希望能够将属性应用于派生类中的(虚拟)方法,但我希望能够提供一个在我的基类中使用这些属性的默认实现.
我这样做的最初计划是覆盖派生类中的方法,然后调用基本实现,此时应用所需的属性,如下所示:
public class Base {
[MyAttribute("A Base Value For Testing")]
public virtual void GetAttributes() {
MethodInfo method = typeof(Base).GetMethod("GetAttributes");
Attribute[] attributes = Attribute.GetCustomAttributes(method, typeof(MyAttribute), true);
foreach (Attibute attr in attributes) {
MyAttribute ma = attr as MyAttribute;
Console.Writeline(ma.Value);
}
}
}
public class Derived : Base {
[MyAttribute("A Value")]
[MyAttribute("Another Value")]
public override void GetAttributes() {
return base.GetAttributes();
}
}
Run Code Online (Sandbox Code Playgroud)
这只打印"测试的基本值",而不是我真正想要的其他值.
有没有人建议如何修改它以获得所需的行为?
我的项目中有许多控制器,它们都是从一个名为BaseController的控制器继承的.我编写了一个自定义属性,我将其应用于整个BaseController类,因此每次操作都在我的任何控制器中运行时,该属性将首先运行.
问题是我有几个控制器动作,我想忽略该属性,但我不知道该怎么做.
有人可以帮忙吗?我正在使用MVC 1.
谢谢.
我正在使用ASP.NET MVC 3 RTM.是否可以通过使用属性更改从视图模型呈现的HTML?
例:
public class Product
{
[AddHtmlAttribute(Name = "disabled", Value = "disabled")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望该属性能够更改呈现的HTML,该属性会导致.我知道它不能仅使用属性来完成.我可能必须通过实现一个接口来挂钩系统,但我应该在哪里看?
我知道MVC使用默认的编辑器模板,我在MVC 3源代码中查看了它们,但是我无法弄清楚是否有可能以某种方式挂钩到渲染元素并添加一些属性.我知道验证系统通过添加自定义HTML属性来支持不显眼的验证.
我想我只需要一个指向我应该看的地方的指针,或者我应该看一下什么界面.
非常感谢.
更新:我正在Html.EditorFor(model => model.Name)为我的字段使用标准HTML帮助程序,并且没有覆盖任何编辑器模板.如果我不必更改或覆盖默认模板,我真的更喜欢.
我正在尝试创建一个自定义属性,它将以一种AOP方式工作(我无法访问postharp,不幸的是,我对Unity不是很熟悉).它有AttributeUsage.Method,并在其构造函数中配置测试环境的某些部分(从app.config中提取一些信息并调用一些配置环境的exes).
它的工作原理,除了现在,当我构建解决方案时,属性被执行 - 这是不可取的.
有没有办法创建一个不在编译时执行的自定义属性?
编辑>我想一个示例用法可能会有所帮助:
public void Scenario1Tests
{
[Test]
[Environment(Environments.A)]
public void Scenario1TestA()
{
Assert.Something();
}
[Test]
[Environment(Environments.Any)]
public void Scenario1TestB()
{
Assert.SomethingElse();
}
}
// Most tests will be written environment independent, some must not
public enum Environments
{
A,
B,
Any
};
[AtrributeUsage(AttributeTargets.Method)]
public void Environment : Attribute
{
public Environment(Environments env)
{
// lots of test can have this attribute, requirement is
// that it is only configured once as it is a lengthy configuration …Run Code Online (Sandbox Code Playgroud) 我目前正在使用属性.我经常遇到错误'属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式.我真的不知道"常量表达"是什么意思.
能够将a传递Func<MyType, bool>给属性(由属性存在时执行的代码所使用)将非常有用.但是,唉,没有.我不明白为什么这种类型不能放在程序集元数据中,我认为这是我无法将其传递给属性的原因.
谁能给我任何想法?
我想创建一个调用其他验证属性的自定义验证属性。
例如,我想创建一个名为PasswordValidationAttribute. 我希望它装饰它被限定在与所述属性RequiredAttribute,RegularExpressionAttribute和StringLengthAttribute具有限定(诸如密码和一个最大和最小字符串长度的正则表达式)的各种参数。
我正在努力从哪里开始,确定涉及多少工作并确定它是否可能。一旦将此属性应用于属性,我希望它ValidationMessageFor HtmlHelper正确处理并执行服务器端调用。我希望我不需要重新定义它们(否则工作量太大)。
我想导出类型 Foo具有多个元数据选项的:
public interface IFoo
{
void Do ();
}
[ExportFoo ("Bar", "1.0")]
[ExportFoo ("Baz", "1.0")]
[ExportFoo ("Baz", "2.0")]
public class Foo : IFoo
{
public void Do () {}
}
Run Code Online (Sandbox Code Playgroud)
我已经宣布了 ExportFooAttribute这样说了:
public interface IFooMeta
{
string Name { get; }
string Version { get; }
}
[MetadataAttribute, AttributeUsage (AttributeTargets.Class, AllowMultiple = true)]
public class ExportFooAttribute : ExportAttribute, IFooMeta
{
public string Name { get; private set; }
public string Version { get; private set; }
public …Run Code Online (Sandbox Code Playgroud) 假设我有一个接口IAppModule,由几个类实现.是否可以编写一个只能应用于公开的类型的自定义属性IAppModule?如果是这样,怎么样?
我一直在寻找WebApi属性的非参数注入选项.
我的问题是使用Structuremap是否真的可以实现这一点?
我一直在谷歌搜索,但继续提出属性注入(我不喜欢使用)或假设的构造函数注入的实现,我到目前为止无法复制.
我选择的容器是Structuremap,但是任何这样的例子就足够了,因为我能够转换它.
有人管过这个吗?
structuremap dependency-injection custom-attributes asp.net-web-api structuremap3
有没有办法覆盖AllowAnonymous属性?我已经实现了从数据库加载用户菜单和按钮的自定义授权,如下所示:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new MyCustomAuthorization()); // Custom Authorization for Rights & Priveleges
}
Run Code Online (Sandbox Code Playgroud)
以上工作正常.
现在,我希望在用户通过身份验证时允许访问某些操作,在这种情况下无需检查授权.例:
[Authorize]
public class MenusAndButtonsController : BaseController
{
[Authenticated] // my custom attribute that will check if user is logged in or not
public JsonResult GetGeneralMenuAndButtons()
{
using (MealPlannerAuthorizationEntities repository = new MealPlannerAuthorizationEntities())
{
var MenusAndButtons = repository.MP_AUTH_Menus.Where(x => x.IsButton == false && x.IsListButton == false).Select(c => new { DisplayText = c.MenuName, Value = c.MenuId }).OrderBy(x => x.DisplayText).ToList();
return Json(new …Run Code Online (Sandbox Code Playgroud) authentication custom-attributes filterattribute asp.net-mvc-4
c# ×6
asp.net-mvc ×2
.net ×1
aop ×1
attributes ×1
base-class ×1
css ×1
html ×1
inheritance ×1
mef ×1
structuremap ×1
validation ×1