我刚刚下载了动态对象框架
clay
并且正在遇到与之相关的问题
castle project
versions。Clay使用“Castle”2.0版的功能,而我有一个项目已经开始引用2.5版。不用说为了让事情更有趣,我完全是“城堡”和国际奥委会的初学者。
真正的问题是,升级粘土解决方案中的引用会导致折旧方法警告。无论您是否支持该方法,提供的单元测试都会失败,在“InterfaceProxyBehavior”的“Intercept”中的以下代码中出现“cannot perform runtime binding on a null reference”异常:
var invoker=bindinvoker(invocation);
调用程序(调用);
< /代码>
生成运行时警告的代码位于“DefaultClayActivator”的“CreateInstance”中:
var proxytype=_builder.createClassProxyType(baseType,空,选项);
< /代码>
如前所述,我仍然是温莎城堡的一个完全初学者,刚从国际奥委会开始,所以还没有遇到代理的问题。令人沮丧的是,我甚至不知道错误消息是在告诉我什么,还是在要求什么。
是否有人已经将粘土移植到城堡项目的2.5版,所以要知道所需的步骤。或者任何一个有城堡这一部分经验的人都能对这个错误和我可能需要做的来解决它投下更多的光吗?
更新
对于失败的功能,我仍然不太明智,但我有机会重新访问在castle.core中运行v2.0(works)和v2.5(breaks)的代码。附件是调试信息工作时和中断时的两个图像。它失败的测试在下面,我用注释指示了呼叫。
命名空间claysharp.tests{
[测试夹具]
公共类BinderFallbackTests{
…
[试验]
public void testinvokepaths()。{
var dynamically=clayActivator.createInstance<alpha>(新的IClayBehavior[]){
新建InterfaceProxyBehavior(),
新Alphabehavior()
(});
alpha静态=动态;
ialpha interfacely=动态;
assert.that(dynamically.hello(),is.equalto(“world-”);
assert.that(statically.hello(),is.equalto(“world-”);
assert.that(interfacely.hello(),is.equalto(“world-”));
assert.that(dynamically.foo(),is.equalto(“bar-”);
assert.that(interfacely.foo(),is.equalto(“bar-”);
assert.throws<runtimebinderexception>(()=>动态。MissingNotHandled());
}
…
}
}
< /代码>
这是使用castle.core的v2.5时的调试信息,并引发异常:

这是使用castle.core的v2.0(可以工作)对同一个调用/线路的调试信息,该调用/线路导致了v2.5的问题。
.
我遇到了一些问题castle project版本。Clay使用“Castle”2.0版的功能,而我有一个项目已经开始引用2.5版。不用说只是为了让事情更有趣,我是一个完全的初学者在所有的事情“城堡”和国际奥委会。
真正的问题是,升级粘土解决方案中的引用会导致折旧方法警告。无论您是否支持该方法,提供的单元测试都会失败,在“InterfaceProxyBehavior”的“Intercept”中的以下代码中出现“cannot perform runtime binding on a null reference”异常:
var invoker = BindInvoker(invocation);
invoker(invocation);
生成运行时警告的代码位于“DefaultClayActivator”的“CreateInstance”中:
var proxyType = _builder.CreateClassProxyType(baseType, null, options);
如前所述,我仍然是温莎城堡的一个完全初学者,刚从国际奥委会开始,所以还没有遇到代理的问题。令人沮丧的是,我甚至不知道错误信息告诉我什么,或者要求什么。
是否有人已经将粘土移植到城堡项目的2.5版,所以要知道所需的步骤。或者任何一个有城堡这一部分经验的人都能对这个错误和我可能需要做什么来解决它提供更多的信息吗?
更新的
对于失败的功能,我仍然不太明智,但我有机会重新访问在castle.core中运行v2.0(works)和v2.5(breaks)的代码。附件是调试信息工作时和中断时的两个图像。它失败的测试在下面,我用一个注释来表示这个调用。
namespace ClaySharp.Tests {
[TestFixture]
public class BinderFallbackTests {
...
[Test]
public void TestInvokePaths() {
var dynamically = ClayActivator.CreateInstance<Alpha>(new IClayBehavior[] {
new InterfaceProxyBehavior(),
new AlphaBehavior()
});
Alpha statically = dynamically;
IAlpha interfacially = dynamically;
Assert.That(dynamically.Hello(), Is.EqualTo("World-"));
Assert.That(statically.Hello(), Is.EqualTo("World-"));
Assert.That(interfacially.Hello(), Is.EqualTo("World-"));
Assert.That(dynamically.Foo(), Is.EqualTo("Bar-"));
Assert.That(interfacially.Foo(), Is.EqualTo("Bar-"));
Assert.Throws<RuntimeBinderException>(() => dynamically.MissingNotHandled());
}
...
}
}
这是使用castle.core的v2.5时的调试信息,并引发异常:

这是使用castle.core的v2.0(可以工作)对同一个调用/线路的调试信息,该调用/线路导致了v2.5的问题。
