c# - 我可以将容器类方法与通用接口(interface)的方法集成吗?

标签 c# generics reflection interface

我有一个容器类 Foo<TInterface>它在其构造函数中采用任意接口(interface)类型参数和字符串“strCode”。

在实例化 Foo 时,strCode 通过 CSharpCodeProvider 编译,并且通过反射,适当的类型位于新编译的代码中,然后转换为 TInterface 类型并在 Foo 中提升到属性 TInterface 栏。

这工作正常,客户端可以毫无问题地访问 foo.bar。然而,Foo 还包含(在其他方法中)一个名为 Recompile 的方法,它基本上以上述方式获取并编译新的代码字符串。这也可以正常工作,但这意味着客户端最终会得到一个 Foo API,其中的方法组织如下:

foo.bar.MakeCoffee
foo.bar.DoMagic
foo.Recompile

我宁愿:

foo.MakeCoffee
foo.DoMagic
foo.Recompile

换句话说,我想返回一个具有对通用接口(interface)方法和 Foo API 方法的顶级访问权限的类实例。

理想情况下,返回 Foo<TInterface> 的实例会很好但我知道 C# 泛型不允许这样做。如果需要,我很乐意发布代码,但首先要确保我没有因为 C# 的静态类型性质而找错树。

最佳答案

我认为你必须使用类似 Castle Dynamic Proxy 的代理库或 linfu .

您要实现的目标是什么?你要做AOP吗?

关于c# - 我可以将容器类方法与通用接口(interface)的方法集成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6563114/

相关文章:

c# - 如何使用 PythonNET 和 C#.NET 将枚举放入列表中?

c# - 如何在 NHibernate 中使用子查询作为联接?

c# - Initializer.Seed() 在 context.SaveChanges() 上抛出异常

c# - 将泛型添加到表单

c# - 是否可以知道属性的访问器是否是默认的?

java - 是否可以通过 Play!模板作为变量?

c# - ext.net 2.0 - 获取树节点的自定义属性

java - 重构泛型

java - 为特定类型的类声明一个字符串到类的映射

c# - 创建 C# 属性以抑制方法执行