在自定义属性中使用“new SomeObject”

时间:2011-06-14 15:19:41

标签: c# attributes constructor parameter-passing custom-attributes

我在游戏中使用自定义属性,允许我定义聚合组件之间的依赖关系。

[ComponentDependency(typeof(SomeDependentComponent))]
class SomeComponent : Component {}

但是,这意味着我必须为我想要添加的每个组件使用默认值。我希望能够做到:

[ComponentDependency(typeof(SomeDependentComponent), ctrParam1, ctrParam2...)]

并将这些直接反馈到Activator.CreateInstance(Type, object[]),但我收到了错误。我认为这与编译时的属性有关。我对他们了解不多。

这可能吗?

编辑:如果我要使用参数,它可能看起来像: [ComponentDependency(typeof(PositionalComponent), new Vector2(300, 300))]

3 个答案:

答案 0 :(得分:2)

你不能。

属性被编译为程序集中的元数据 属性参数只能是基元或Type个对象。

答案 1 :(得分:1)

正如SLaks所说,这不起作用。您正在尝试构建的内容称为“依赖注入”,这是一种功能强大且越来越流行的模式。有许多为.NET构建的依赖注入框架 - 我建议对它们进行一些研究并选择一个 - 它们有机制(通常是XML配置文件)来处理你想要做的事情。

答案 2 :(得分:0)

您无法更改属性的参数,因为它们已编译并存储在装配元数据中。

您可以在组件上实现一个界面,例如IDependantComponent并在创建后调用SetDependencies。