如何在运行时使用容器跟踪对象时设计透明的API



目的:我想为我的WinForm应用程序实现一个控制台,以便在运行时查询某些对象(即实现接口的对象)的属性。我想列出某些Type的所有实例,并显示所选实例的所有属性。是 啊

在阅读了"如何获得实现给定接口的所有加载类型的所有实例?"这一问题后,我确定这无法以合理的方式完成(即,不遍历堆?!),并评估了容器方法,以便实例将自己注册到容器中,并在销毁时从容器中注销,等等,但我对我的替代品不满意:

  • 从处理容器工作的基类派生所有类:我不喜欢继承
  • 实现容器服务和构造函数注入:这是我想到的最好的一个,但我正在寻求一个更透明的解决方案

问题:使用容器方法时,是否有更好的(更透明、最小锁定)模式?

注:出于同样目的,也欢迎采用其他方式。

如果继承对您来说是不可接受的,您可以尝试使用像PostSharp这样的AOP框架来跟踪对象。您可以使用合适的属性来装饰所有要跟踪的对象,并将该属性与postsharp构造相关联。

我已经用它成功地实现了撤消重做。

让每个类处理容器工作是最透明的解决方案。让所有类从基类继承是实现这一点的最简单方法,但可能会妨碍您使用继承进行其他操作。但是不应该涉及那么多代码,所以为每个类复制它应该不是什么大问题,在某个地方使用一些静态方法可以消除几乎所有的代码

但是,我认为更好的解决方案是在接口中添加两个方法:Activate(或者Initialize)和Deactivate(Dispose?)。实现Activate和Deactivate的类的方法可以如上所述工作,也可以根据需要调用容器服务。

你必须记住调用这些方法,但它们给了你很大的力量。它们可以处理在构造函数中可能无法正常工作的其他初始化。如果你发现一些对象不需要,它们允许单个对象选择退出你的容器。它还允许它选择进入您将来可能使用的其他容器。简言之,任何类的对象都有很大的自由度来处理程序结构中自己的业务,并且程序可以通过几个简单的方法调用来创建和管理大量不同类的复杂对象。

相关内容

  • 没有找到相关文章

最新更新