Глина и Замок Виндзор 2.5 - PullRequest
1 голос
/ 06 сентября 2010

Я только что скачал динамический объектный фреймворк 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, и выдается исключение: alt text

Это отладочная информация, использующая v2.0 в castle.core (которая работает) для того же вызова / линии, которая вызывает проблему с v2.5 alt text

Ответы [ 3 ]

3 голосов
/ 09 ноября 2010

Кажется, я это исправил. (все тесты пройдены)

См. Рабочий элемент созданного мной кодплекса и изменения, которые я перенес на свой форк: http://clay.codeplex.com/SourceControl/network/Forks/remcoros/Clay

1 голос
/ 07 сентября 2010

Я никогда не использовал эту штуку с глиной, поэтому все нижеприведенное основано на предположениях.

Сообщение об ошибке от BindInvoker не является ошибкой Касла, но я предполагаю, что это происходит, потому что инициатор пытается привязать к цели вызова прокси-сервера, который в DynamicProxy 2.1 имел значение в некоторых случаях, было неправильно, и более поздние версии 2.2 и 2.5 исправили это, но это было серьезное изменение, которое вы сейчас испытываете.

В другом сообщении об ошибке говорится

Используйте метод CreateClassProxyType вместо этого.

Какой другой метод вы закомментировали? Что здесь не очевидно?

0 голосов
/ 21 февраля 2011

Несколько хороших уроков по динамическим объектам Clay:

  • Податливые динамические объекты C # Часть 1 Ссылка

  • Податливые C #динамические объекты Часть 2 Ссылка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...