草庐IT

c# - caSTLe-windsor 中的多装饰器模式

我们正在重新设计一些遗留软件以使其更易于测试,并决定使用依赖注入(inject)和CaSTLe.Windsor来帮助我们。首先,我们的目标:*许多装饰器都在数据流上工作。*装饰器的多种组合是可能的,并且可能需要每种情况下的根节点从不同的地方获取数据。从技术上讲,我们的设计如下:interfaceIUpdateableValue{TGet();};我们有使用多个组件检索三组数据,所有组件都实现IUpdateableValue()(伪代码):JsonParser(Decompressor(Decrypter(decryptionKeyFileCache(filename,HttpWebDo

c# - 从自定义属性装饰属性中获取值(value)?

我已经编写了一个自定义属性,用于某个类的某些成员:publicclassDummy{[MyAttribute]publicstringFoo{get;set;}[MyAttribute]publicintBar{get;set;}}我能够从类型中获取自定义属性并找到我的特定属性。我不知道该怎么做是获取分配的属性的值。当我获取Dummy的实例并将其(作为对象)传递给我的方法时,我如何获取从.GetProperties()返回的PropertyInfo对象并获取分配给.Foo和.Bar的值?编辑:我的问题是我不知道如何正确调用GetValue。voidTestMethod(objecto)

c# - 装饰者模式的实现

尝试从“HeadFirstDesignPatterns”一书中的代码(用Java编写)在C#中实现装饰器模式。我刚开始使用C#,因此对语法还是陌生的,所以我不确定为什么我不能让下面的注释代码行工作。这是装饰器模式中的第一个抽象基类及其派生类:usingSystem;publicabstractclassBeverage{privateStringm_description;//getadescriptionofthebeveragepublicvirtualStringDescription{get{returnm_description;}}//calculatecostoftheb

c# - 在 autofac 中注册装饰器,无需手动指定所有依赖项

我有一个装饰器,它有一些其他的依赖项,这些依赖项也应该使用容器来解决。示例:publicclassFooDecorator:IFoo{publicFooDecorator(IFooinner,IBarbar,IBazbaz)}我可以这样注册:builder.RegisterType().As();builder.RegisterDecorator((c,inner)=>newFooDecorator(inner,c.Resolve(),c.Resolve()),"key");这是有效的,但不是很好,我必须手动指定所有其他依赖项。我想做的是:builder.RegisterDecorat

c# - 有没有像 c# 的 python 装饰器之类的东西?

我正在包装对API的调用,我的大部分方法都在第一行:if(!Gree.Authorizer.IsAuthorized()){return;}在python中,我会用类似@login_required的东西来装饰这些方法。您会用什么在c#中重构这种类型的逻辑? 最佳答案 您正在寻找称为面向方面编程的更通用编程方法的子集。C#似乎通过几个库来支持它,并且由于某些CLR功能,人们也可以推出自己的库。参见AspectOrientedProgrammingusing.NET其中涵盖了它的基本原理(我正在链接文章中谈论C#细节的部分,但如果您正

c# - 如何有效地测试 Action 是否装饰有属性(AuthorizeAttribute)?

我正在使用MVC,在我的OnActionExecuting()中,我需要确定即将执行的Action方法是否装饰有属性AuthorizeAttribute特别是。我不是在询问授权是否成功/失败,而是在询问该方法是否需要授权。对于非mvc人员filterContext.ActionDescriptor.ActionName是我正在寻找的方法名称。但是,它不是当前正在执行的方法;相反,它是一个将很快执行的方法。目前我有一个如下所示的代码块,但我对每个Action之前的循环不太满意。有更好的方法吗?System.Reflection.MethodInfo[]actionMethodInfo=t

c# - 在 C# 中生成类似于使用装饰器的代码的最佳方法?

假设我有一个不断重复的模式。像这样的东西:staticclassC{[DllImport("mydll")]privatestaticexternuintMyNativeCall1(Actiona);publicstaticuintMyWrapper1(Actiona){//DosomethingreturnMyNativeCall1(a);}[DllImport("mydll")]privatestaticexternuintMyNativeCall2(Actiona);publicstaticuintMyWrapper2(Actiona){//DosomethingreturnMy

c# - 强制类/方法的属性装饰

继我最近关于Large,ComplexObjectsasaWebServiceResult的问题之后.我一直在思考如何确保所有future的子类都可序列化为XML。现在,显然我可以实现IXmlSerializable接口(interface),然后将读取器/写入器插入其中,但我想避免这种情况,因为这意味着我需要在任何时候想要实例化读取器/写入器,并且99.99%的时间我将使用string所以我可能只写我自己的。但是,为了序列化为XML,我只是用Xml???属性(XmlRoot、XmlElement等),然后将其传递给XmlSerializer和StringWriter以获取字符串。这一

c# - 装饰器和 IDisposable

我有一个DbContext的子类publicclassMyContext:DbContext{}我有一个围绕MyContext的IUnitOfWork抽象,它实现了IDisposable以确保像MyContext这样的引用是在适当的时候处理掉publicinterfaceIUnitOfWork:IDisposable{}publicclassUnitOfWork:IUnitOfWork{privatereadonlyMyContext_context;publicUnitOfWork(){_context=newMyContext();}~UnitOfWork(){Dispose(fa

c# - Autofac - 注册多个装饰器

鉴于以下情况:publicinterfaceICommandHandler{voidHandle(TCommandcommand);}publicclassMoveCustomerCommand{}publicclassMoveCustomerCommandHandler:ICommandHandler{publicvoidHandle(MoveCustomerCommandcommand){Console.WriteLine("MoveCustomerCommandHandler");}}publicclassTransactionCommandHandlerDecorator:IC