我在游戏中使用自定义属性,允许我定义聚合组件之间的依赖关系。
[ComponentDependency(typeof(SomeDependentComponent))]
class SomeComponent : Component {}
但是,这意味着我必须为我想要添加的每个组件使用默认值。我希望能够做到:
[ComponentDependency(typeof(SomeDependentComponent), ctrParam1, ctrParam2...)]
并将这些直接反馈到Activator.CreateInstance(Type, object[])
,但我收到了错误。我认为这与编译时的属性有关。我对他们了解不多。
这可能吗?
编辑:如果我要使用参数,它可能看起来像:
[ComponentDependency(typeof(PositionalComponent), new Vector2(300, 300))]
答案 0 :(得分:2)
你不能。
属性被编译为程序集中的元数据
属性参数只能是基元或Type
个对象。
答案 1 :(得分:1)
正如SLaks所说,这不起作用。您正在尝试构建的内容称为“依赖注入”,这是一种功能强大且越来越流行的模式。有许多为.NET构建的依赖注入框架 - 我建议对它们进行一些研究并选择一个 - 它们有机制(通常是XML配置文件)来处理你想要做的事情。
答案 2 :(得分:0)
您无法更改属性的参数,因为它们已编译并存储在装配元数据中。
您可以在组件上实现一个界面,例如IDependantComponent并在创建后调用SetDependencies。