Frage

Ich versuche, einen Abfangjäger erreiche ich Arbeit geschrieben habe, aber aus irgendeinem Grunde scheint es nicht Instanziieren das Interceptor zu sein, wenn ich meine Komponenten anfordern. Ich bin so etwas wie dies zu tun (verzeihen Sie mir, wenn dies nicht ganz kompilieren, aber man sollte auf die Idee kommen):

container.Register(
    Component.For<MyInterceptor>().LifeStyle.Transient,
    AllTypes.Pick().FromAssembly(...).If(t => typeof(IView).IsAssignableFrom(t)).
    Configure(c => c.LifeStyle.Is(LifestyleType.Transient).Named(...).
                   Interceptors(new InterceptorReference(typeof(MyInterceptor)).
    WithService.FromInterface(typeof(IView)));

Ich habe in dem Konstruktor setzt Grenzwerte für den Interceptor und es scheint nicht, es überhaupt zu instanziieren werden.

In der Vergangenheit hat ich meinen Abfangjäger mit der XML-Konfiguration registriert, aber ich bin daran interessiert, die fließend Schnittstelle zu verwenden.

Jede Hilfe wäre sehr dankbar!

War es hilfreich?

Lösung

Ich glaube, Sie mißbrauchen WithService.FromInterface. Die docs sagen:

  

Verwendet implementiert das Unter zum Nachschlagen   Schnittstelle. Zum Beispiel: Wenn Sie   IService und IProductService:   ISomeInterface, IService,   ISomeOtherInterface. Wenn du anrufst   FromInterface (typeof (IService)), dann   IProductService verwendet. Nützlich   wenn Sie registrieren möchten alle Ihre   Dienstleistungen und aber nicht festlegen möchten,   alle von ihnen.

Sie fehlt auch die InterceptorGroup Anywhere. Hier ist eine Arbeitsprobe, habe ich es so wenig wie möglich von Ihrer Probe, damit es funktioniert:

[TestFixture]
public class PPTests {
    public interface IFoo {
        void Do();
    }

    public class Foo : IFoo {
        public void Do() {}
    }

    public class MyInterceptor : IInterceptor {
        public void Intercept(IInvocation invocation) {
            Console.WriteLine("intercepted");
        }
    }

    [Test]
    public void Interceptor() {
        var container = new WindsorContainer();

        container.Register(
            Component.For<MyInterceptor>().LifeStyle.Transient,
            AllTypes.Pick()
                .From(typeof (Foo))
                .If(t => typeof (IFoo).IsAssignableFrom(t))
                .Configure(c => c.LifeStyle.Is(LifestyleType.Transient)
                                    .Interceptors(new InterceptorReference(typeof (MyInterceptor))).Anywhere)
                .WithService.Select(new[] {typeof(IFoo)}));

        container.Resolve<IFoo>().Do();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top