是否可以编写一个C#程序集,在加载时会将方法从另一个程序集注入一个类?如果是,注入的方法是否可以使用DLR的语言获得,如IronPython?
namespace IronPython.Runtime
{
public class Bytes : IList<byte>, ICodeFormattable, IExpressionSerializable
{
internal byte[] _bytes;
//I WANT TO INJECT THIS METHOD
public byte[] getbytes()
{
return _bytes;
}
}
}
我需要这种方法,如果可能的话,我想避免重新编译IronPython。
答案 0 :(得分:1)
这可以通过TypeMock这样的框架来完成,这些框架可以挂钩到框架分析API中。
然而,这种注入通常仅用于促进单元测试,而不是用于生产代码,并且性能受到影响。我的意见是,如果你不得不做一些像单元测试那样激烈的事情,那么你可能做错了。
答案 1 :(得分:1)
可以从IronPython访问扩展方法。见http://blogs.msdn.com/saveenr/archive/2008/11/14/consuming-extension-methods-in-ironpython.aspx
答案 2 :(得分:0)
您可以使用反射将此方法转换为另一个程序集
我不知道IronPython,但我认为这会对你有帮助
http://www.voidspace.org.uk/ironpython/dynamically_compiling.shtml
答案 3 :(得分:0)
我不相信一旦创建了.NET类型就可以扩展它。
如果您只需要byte[]
(在IronPython中,我推测),您可以这样做:
>>> import clr
>>> import System
>>> b = bytes([1, 2, 3, 4])
>>> a = System.Array[bytes](b)
>>> a
Array[bytes]((b'\x01', b'\x02', b'\x03', b'\x04'))
但是,IronPython不太可能允许访问Bytes的底层存储(除非是CPython),因为它不安全。