当前位置: 首页 > 编程语言 > C#

C#中如何自动生成装饰器模式分享

时间:2023-04-10 11:20:31 C#

C#中如何自动生成装饰器模式voidFunc2();}classConcrete:IMyInterface{publicvirtualvoidFunc1(){//dosomething}publicvirtualvoidFunc2(){//dosomething}}现在,我想创建一个类,用一些特定的逻辑装饰每个具体的类方法,在非生产环境中,在调用之前和之后执行。类装饰器:具体{publicoverridevoidFunc1(){Pre();基地.Func1;邮政();}publicoverridevoidFunc2(){Pre();基地.Func2;邮政();我的问题是,有没有比在界面上使用反射并创建扩展名为cs的文本文件更简单的自动生成此类的方法?就个人而言,我只是在需要的地方明确记录,但如果您设置为使用装饰器来执行此操作,则可以使用RealProxy类。它可能看起来像这样:publicclassDecoratorProxy:RealProxy{privateTm_instance;publicstaticTCreateDecorator(Tinstance){varproxy=newDecoratorProxy(instance);(T)proxy.GetTransparentProxy();}privateDecoratorProxy(Tinstance):base(typeof(T)){m_instance=instance;}publicoverrideIMessageInvoke(IMessagemsg){IMethodCallMessagemethodMessage=msgasIMethodCallMessage;if(methodMessage!=null){//记录方法信息//调用方法methodMessage.MethodBase.Invoke(m_instance,methodMessage.Args);返回新的ReturnMessage(retval等);你试过PostSharp了吗?它可以帮助您自动“检测”类并实现您的日志记录方案,而无需实际创建装饰器。日志应用程序块怎么样?http://msdn.microsoft.com/en-us/library/ff647183.aspx我编写了一个T4模板,能够根据一些简单的约定为相当复杂的类生成装饰器。该项目可以在GitHub-T4Decorators上找到。类似于T4MVC,我就是这么想的。你能用T4和反射吗?也许这些其他问题可以提供帮助:我们有相同的要求并编写了一个Roslyn生成器来执行此操作,请在此处查看:https://github.com/proactima/ProxyGen您需要稍微修改代码以满足您的需要。基本上,我们将接口的方法(全部来自某个名称空间)包装在“ReliableServiceCall”方法中。修改它来做其他事情是微不足道的。这里最好的方法是通过接口使用装饰器模式。我知道这是一篇很老的帖子,但是如果你使用IoC注入器,比如SimpleInjector,你可以在一行代码中设置这些装饰器调用。那么你可以这样做:以上是《C#学习教程:如何在C#中自动生成装饰器模式》。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassDecorator:IMyInterface{privatereadonlyIMyInterface_next;publicDecorator(IMyInterfacenext){_next=next;}publicoverridevoidFunc1(){Pre();_next.Func1;邮政();}publicvirtualvoidFunc2(){Pre();_next.Func2;邮政();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: