Question

Je suis en train d'obtenir un intercepteur j'ai écrit au travail, mais pour une raison quelconque, il ne semble pas être instanciation l'intercepteur quand je demande mes composants. Je fais quelque chose comme ça (pardonnez-moi si cela ne compile pas tout à fait, mais vous devriez obtenir l'idée):

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)));

Je l'ai mis dans le constructeur des points d'arrêt pour l'Interceptor et il ne semble pas être l'instanciation du tout.

Dans le passé, je me suis inscrit mes intercepteurs en utilisant la configuration XML, mais je suis impatient d'utiliser l'interface fluide.

Toute aide serait grandement appréciée!

Était-ce utile?

La solution

Je pense que vous êtes abusant WithService.FromInterface. Les docs disent:

  

Utilise des outils pour rechercher les sous   interface. Par exemple: si vous avez   IService et IProductService:   ISomeInterface, IService,   ISomeOtherInterface. Quand vous appelez   FromInterface (typeof (IService)) puis   IProductService sera utilisé. Utile   lorsque vous souhaitez enregistrer tous votre   services et mais souhaitez pas spécifier   tous.

Vous manque aussi InterceptorGroup Anywhere. Voici un exemple de travail, je l'ai changé aussi peu que possible de votre échantillon pour le faire fonctionner:

[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();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top