编程语言
首页 > 编程语言> > 如何利用C#属性和反射在标记的对象上注入/强制后期绑定?

如何利用C#属性和反射在标记的对象上注入/强制后期绑定?

作者:互联网

我喜欢设计模式,但问题是实现起来有些繁琐.
例如,装饰一个具有20个成员的对象只是令人讨厌.

因此,我想创建一个漂亮的设计模式库,以将其应用于类(作为基类或属性),以更快,更轻松地实现这些模式.

问题是…我不太确定从哪里开始-因为我大多不熟悉属性和反射.

我想利用属性来标记Singleton(类似于Export标记),Multiton和Decorators …,如果可能的话.但是我什至不知道从哪里开始才能创建一个改变其实例功能的单例属性.

我的有限研究使我相信,通过属性使用反射/后期绑定并获得对程序集中所有已标记类的访问权限,将使您能够一起破解一个单例……但我仍不完全确定该怎么做.完成.

我发现了一个名为Ninject 1.0的框架,该框架创建了Singleton属性-但是该库是如此广泛且没有文档说明,因此我目前无法遵循其逻辑.

我觉得具有这种功能的库将为许多开发人员做出巨大贡献.因此,如果有人可以提供一些示例代码使我指向正确的方向以将这些模式之一创建为属性,则将不胜感激-其代码不会涉及过多.或者,如果有人愿意引导我完成Ninject的单例属性实现,以便我可以解决这个问题……

感谢您的时间和考虑.

解决方法:

我认为您对设计模式的含义有些困惑.

模式实际上是一种常见的做事方式,旨在解决特定问题.

您并不是真正出于模式而使用模式.使用更多模式并不会自动意味着好的.您可以使用模式来解决类型问题-希望该模式是解决该问题的公认最佳实践方法.不要尝试在代码中应用模式,因为这样可以.

现在,经过所有这些,可以真正看出您计划做的不是实现模式的正确方法.您不使用属性等标记代码,然后将其称为模式.模式是您的代码.您的代码就是模式.例如,除非您确实实现了发布/订阅功能,否则不要在类上标记发布/订阅模式.例如,您没有用“ Singleton”标记一个类,然后该类变成了单例模式.使用Singleton模式要求您围绕该设计编写程序(和类).

但是,您可以使用某些属性标记代码或类,以帮助检查代码/类是否符合特定的模式.

例如,您可以实现一个遍历所有类的类型检查器,检查是否有任何内容标记为“ publisher”,并查看该类是否实现了“ IPublisher”接口.或者您的类型检查器可以检查是否有任何类被标记为“ Singleton”,构造函数是否允许一次构造多个实例.

但是属性和反射通常不是实现模式的工具.

在没有多重继承的C#中,实现模式的方法有时仅通过基类实现.例如,您可以通过声明一个“ SingletonObject”基类来实现“单身”模式,该基类将自身限制为仅一个实例.然后,您可以从该基类派生任何要成为单例的类.例如,您可以通过声明IPublisher和ISubscriber接口来实现“发布/订阅”模式.

现在,如果您真的只想在C#类上使用Decorator模式(按照问题的标题),那么您正在寻找的是一个自动包装对象生成器.您可以将包装器基于ExpandoObject,循环遍历基础对象的属性,然后将属性添加到ExpandoObject中,该属性仅委托给基础对象.然后将新属性添加到基础对象顶部的ExpandoObject中.瞧!您将获得auto-Decorator-Pattern包装器类生成器.

标签:late-binding,reflection,attributes,c,design-patterns
来源: https://codeday.me/bug/20191102/1994173.html