对不起,我不知道该怎么说的抽象标题...
我正在建立一个小型的网络框架,我想做的是能够在列表中注册方法,以便我可以使用索引来调用它们,我也希望在之后注册它们。已经构建了dll,因此可以在其他项目中使用它,因此也必须进行松散耦合。
[我对使用自定义属性的简单但笨拙的注册方法不满意,我已经看到它们在笨重的框架中用于添加元数据,但更令人惊讶的是将其应用于功能。
因此,本质上,我希望能够将属性添加到任何方法,并使该标记方法能够在某些事件(最好是在编译时,以避免运行时出现性能问题)时将其自身添加到方法列表中。 :
[Command]
public void DisconnectPlayer(Player player)
{
// Logic here
}
我说的可能吗?
我以前使用自定义属性来标识动态调度系统的工作流程。如果希望控制器将参数传递给每个函数并处理返回类型,以及进行循环检测和解析同名方法,则必须进行动态调度。简而言之,这是创建可控流程的困难方法。是的,您可以通过这种方式实现多重继承。
如果您询问有关构建自定义属性的信息,将使用Reflection获取其值。您需要组织方法在项目中的表示方式,以编写算法以在运行时对其进行检测并构建列表。
[AttributeUsage(AttributeTargets.Class)] // or Method, Property, etc.
public class MyCustomAttribute : Attribute
{
public string Instruction { get; set; }
}
// example class
[MyCustomAttribute (Instruction = "Command")]
public class ReportRow { ... }
void OrganizeProcesses()
{
foreach (var propertyInfo in this.GetType().GetProperties())
{
object[] attribute = propertyInfo.GetCustomAttributes(typeof(MyCustomAttribute), true);
if (attribute.Length > 0)
{
var myAttribute = (MyCustomAttribute)attribute[0];
if (String.Compare(propertyInfo.Instruction, "Command") == 0)
// e.g. assign method to dictionary, unless its signature is there.
}
}
}
自定义属性使我们能够对标识符等元数据进行硬编码,因此可以使用。但是,我有一个用于自定义流程的完整流程体系结构,以最少的代码即可完成更多工作。
您可以以任意方式组装,扩展和重塑的过程在制造中称为质量定制系统。组织生产流程的技巧是不传递数据。我的体系结构为硬编码和动态表单建模。但是组织和管理协作(生产)流程的规则很复杂,因此您应该在我的网站http://www.powersemantics.com/上研究系统的各个方面。
这是我的体系结构满足您的要求的“在列表中注册方法以使用索引调用它们”。进程包括自定义计算机,仅包含M()方法的类以及对其进行操作的数据点的引用。定制计算机不需要动态调度,因为它们不传递参数。它们受任何DTO需要处理的属性的引用约束。他们自己从堆中获取数据。因此,控制器可以简单地执行其活动的机器路由列表。欢迎全面控制。
public class MyProduct
{
public Cvar<int> X { get; set; }
}
public class MyCustomMachine : Producer<MyProduct>, IMachine
{
public void M() { ... }
}
您的直接问题可能是通过索引来控制执行,但是此体系结构解决了以后的所有可控性问题:中断和恢复,扩展和更改那些流程,将部件与UI或BackgroundWorker的业务层相关联,注入控制步骤或默认值动态设置步骤或子流程步骤,等等。
简而言之,POWER一次是每个设计模式。