首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -将lambda传递给属性(方面)构造函数的库

C# -将lambda传递给属性(方面)构造函数的库
EN

Stack Overflow用户
提问于 2016-08-08 17:16:25
回答 1查看 64关注 0票数 0

为了映射的目的,我想将一个Func<>传递到属性构造函数中,这样类似的事情就成为可能:

代码语言:javascript
复制
[Map<Foo>(foo=>foo.Name)]
public string Name { get; set; }

我意识到属性必须是编译时常数,所以使用纯C#是不可能做到这一点的。

我想知道是否存在类似PostSharp的库来做类似的事情(从this post判断,我想有方法在纯IL中实现这一点)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-08 17:24:10

不行。您需要C#中目前不支持的两种属性:

  • 泛型类型参数
  • 非恒定的争论。

假设属性只是元数据,您不能期望在其使用过程中不运行任何东西(显然,属性构造函数可以运行您可能添加到其中的任何代码)。

虽然您所链接的其他问答提到直接发射IL时您应该能够做到这一点,但我也非常肯定,您可以避免为您的项目增加实现fluent API的复杂性:

代码语言:javascript
复制
public class A : IMappingConfigurator
{
     public string Name { get; set; }

     public void Configure(IMappingConfiguration config)
     {
          config.Map<Foo>(foo => foo.Name);
     } 
}

在配置阶段,您可以获得实现整个接口的所有类型,并实例化它们以获得每个接口的配置:

代码语言:javascript
复制
IEnumerable<IMappingConfigurator> configurators = Assembly.GetExecutingAssembly().GetTypes().Where
(
    t => t.GetInterfaces().Any(t => t == typeof(IMappingConfigurator))
).Select(t => (IMappingConfigurator)Activator.CreateInstance(t));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38835041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档