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

按属性划分C#unity拦截分享

时间:2023-04-10 14:20:53 C#

按属性划分C#unity拦截有没有办法在C#unity中使用属性拦截,并将对象注册码保存在XML文件(如app.config)中?如果是的话,你能给我提供这样的注册代码吗?我做了很多解决方法,但没有找到解决这个问题的方法。我假设您的意思是使用自定义属性来指示要拦截的方法。您可以使用策略注入来实现使用XML配置的拦截。首先,让我们定义一个自定义属性:[AttributeUsage(AttributeTargets.Method)]publicclassMyInterceptionAttribute:Attribute{}接下来,我们可以创建一个ICallHandler来执行一些拦截工作。此实现只会在方法前后执行Console.WriteLine:IMethodReturn=getNext()(输入,getNext);Console.WriteLine("调用完成");返回结果;}intICallHandler.Order{得到;放;接下来让我们假设我们有一些接口和实现:publicinterfaceIMyClass{voidDo();voidDoAgain();}publicclassMyClass:IMyClass{[MyInterception]publicvoidDo(){Console.WriteLine("Do!");}publicvoidDoAgain(){Console.WriteLine("再做一次!");请注意,我已将自定义属性MyInterception仅应用于Do方法,但未应用于DoAgain方法。我们将拦截对Do方法的所有调用。接下来,我们创建配置来定义策略、配置匹配规则并使用拦截器注册类型:我们还需要一个类型转换器来将自定义属性的字符串表示形式转换为正确的类型:publicclassAssemblyQualifiedTypeNameConverter:ConfigurationConverterBase{上下文,System.Globalization.CultureInfo文化,对象值,TypedestinationType){if(value!=null){TypetypeValue=valueasType;if(typeValue==null){thrownewArgumentException("无法转换类型",typeof(Type).Name);}if(typeValue!=null)return(typeValue).AssemblyQualifiedName;}返回空值;}publicoverrideobjectConvertFrom(ITypeDescriptorContextcontext,System.Globalization.CultureInfoculture,objectvalue){stringstringValue=(string)value;如果(!string.IsNullOrEmpty(stringValue)){类型结果=Type.GetType(stringValue,false);if(result==null){thrownewArgumentException("无效类型","值");}返回结果;}返回空值;一切就绪后,我们可以创建一个容器并加载配置:varcontainer=newUnityContainer().LoadConfiguration();varmyClass=container.Resolve();我的班级。做();myClass.DoAgain();输出将是:InvokingDoDo!完成调用再做一次!Showthefirstmethodisinterceptedandthesecondmethodisnotintercepted这是一个老问题,但它确实对我有用,所以我将添加unity配置的C#版本。以上就是C#学习教程:按属性划分C#unity拦截分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——).AddCallHandler();container.RegisterType(newInterceptor(),newInterceptionBehavior());联系管理员删除。如需转载请注明出处: