使用 Reflection.Emit 将自定义属性复制到另一个方法
我正在尝试根据现有接口生成一组新的 wcf 接口。 我正在使用 Reflection.Emit 命名空间来完成此任务。我的问题是如何将旧的自定义属性从一种方法复制到新方法。我见过的 SetCustomAttributes() 的每个示例都需要事先了解属性类型。我需要在运行时发现属性类型。有什么想法吗?
I am trying to generate a new set of wcf interfaces based on existing interfaces.
I am using the Reflection.Emit namespace to accomplish this. My problem is how to copy the old custom attributes from one method to the new method. Every example I have seen of SetCustomAttributes() requires knowing the attribute type beforehand. I need to discover the attribute type at runtime. Any thoughts?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您(frjames)发布的答案很接近,但没有考虑像...这样的属性初始值设定项。
但是,将 CustomAttributeData 转换为 CustomAttributeBuilder 以在 Reflection.Emit 中使用的想法是正确的。
我最终不得不为一个开源项目(Autofac)执行此操作,并提出了这种扩展方法:
该方法解释了初始化属性的所有方法。
The answer you (frjames) posted is close, but doesn't account for property initializers like...
However, the idea of converting CustomAttributeData to a CustomAttributeBuilder for use in Reflection.Emit is right on.
I ended up having to do this for an open source project (Autofac) and came up with this extension method:
That one accounts for all the ways to initialize the attribute.
这是我经过更多研究后得出的答案。
Here is the answer I came up with after some more research.
Travis Illig 的代码需要修改如下才能与 .Net Core 一起使用:
The code from Travis Illig needs amendment as below to work with .Net Core:
试试这个:
我假设你有你的方法的 MethodInfo
try this:
i assume you have MethodInfo for your methods