Я только что скачал динамический объектный фреймворк Clay и сталкиваюсь с проблемами, касающимися проекта замка версий. Клей использует функциональность v2.0 из "замка", в то время как у меня есть проект, который был запущен со ссылкой на v2.5. Само собой разумеется, просто чтобы сделать вещи более интересными, я полный новичок во всем, что касается «Касла» и IoC.
Реальная проблема заключается в том, что обновление ссылок в глиняном растворе приводит к предупреждению об устаревшем методе. Независимо от того, подавлен ли метод или нет, предоставленные модульные тесты завершаются с ошибкой «Невозможно выполнить привязку во время выполнения для нулевой ссылки» в следующем коде в «Перехват» «InterfaceProxyBehavior»:
var invoker = BindInvoker(invocation);
invoker(invocation);
Код, который выдает предупреждение во время выполнения, находится в «CreateInstance» в «DefaultClayActivator»:
//var proxyType = _builder.CreateClassProxy(baseType, options);
var proxyType = _builder.CreateClassProxyType(baseType, null, options);
Как уже говорилось, я все еще начинающий с Castle Windsor и только начинаю с IoC, так что я еще даже не сталкивался с Proxy. К сожалению, я понятия не имею, что сообщение об ошибке даже говорит мне или просит.
Пусть кто-нибудь уже перенес Клей на версию 2.5 проекта замка, поэтому знайте, какие шаги необходимо выполнить. Или любой, имеющий опыт в этой части замка, может пролить свет на ошибку и на то, что мне, возможно, нужно сделать, чтобы ее исправить.
Обновлено
Я до сих пор не знаю, кто работает с ошибками, но у меня была возможность пересмотреть код, выполняющий его, как с v2.0 (работает), так и с v2.5 (перерывы) в castle.core. Прилагаются два изображения отладочной информации, когда она работает, а затем, когда она ломается. Тест, на котором он не проходит, приведен ниже, я указал на звонок с комментарием.
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-")); // <- Fails on this call
Assert.That(dynamically.Foo(), Is.EqualTo("Bar-"));
Assert.That(interfacially.Foo(), Is.EqualTo("Bar-"));
Assert.Throws<RuntimeBinderException>(() => dynamically.MissingNotHandled());
}
...
}
}
Это отладочная информация при использовании v2.5 файла castle.core, и выдается исключение:
Это отладочная информация, использующая v2.0 в castle.core (которая работает) для того же вызова / линии, которая вызывает проблему с v2.5