Вопрос

На основе Документация для Castle.Core.interceptorattribute, Я пытаюсь сделать этот простой тестовый проход, и мне не повезет:

using NUnit.Framework;
using Castle.DynamicProxy;
using Castle.Core;
using Castle.MicroKernel;
using Castle.MicroKernel.Registration;


public interface IIntercepted { string get(); }

[Interceptor(typeof(TestInterceptor))]
public class Intercepted : IIntercepted
{
    public virtual string get() { return "From Service"; }
}

public class TestInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        invocation.Proceed();
        invocation.ReturnValue = "From Proxy";
    }
}
[TestFixture]
public class TestFixture
{
    [Test]
    public void Test_interception()
    {
        var container = new DefaultKernel();
        container.Register(
            Component.For<TestInterceptor>().LifeStyle.Transient,
            Component.For<IIntercepted>().ImplementedBy<Intercepted>());

        var instance = container.Resolve<IIntercepted>();
        Assert.That(instance.get(), Is.EqualTo("From Proxy"));
    }
}

В шагах через тесты, instance не прокси и get() Возвращает "от сервиса". Мне кажется, что в этом случае мне не нужно делать get() Виртуал, но сделал это просто, чтобы быть уверенным. У меня есть ощущение, что я скучаю с чем-то очевидным и фундаментальным здесь, например, есть ли объект, который необходимо зарегистрировать здесь, чтобы сделать контейнер в курсе атрибута перехватчика? Я не могу найти никакой документации к этому эффекту. Может кто-нибудь сказать мне, что я делаю не так?

Я использую Castle версию 2.5 и версию 4.0 .NET Framework.

Это было полезно?

Решение

Если вы собираетесь использовать DefaultKernel Прямо, вы должны настроить прокси-завод:

var container = new DefaultKernel {ProxyFactory = new DefaultProxyFactory()};

В противном случае просто используйте WindsorContainer вместо этого (рекомендуется).

BTW: Вам не нужно делать метод виртуальным в нуме в этом случае в этом случае.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top