谁能解释为什么这不起作用?如果你从 IFoo 的注册中移除拦截器并解析一个 Bar,你会得到一个 Foo(MyFoo 不为空)。但是使用拦截器, Foo 不再解析。
为什么?我怎么知道为什么它不能通过日志记录或跟踪来解决?
版本:
- 城堡核心:3.2
- 温莎城堡:3.2
- .NET 4.5
C# 5
using Castle.DynamicProxy; using Castle.MicroKernel.Registration; using Castle.Windsor; using System; namespace Sandbox { public interface IFooInterceptor : IInterceptor { } public interface IFoo { void Print(); } public interface IBar { IFoo MyFoo { get; set; } } public class Foo : IFoo { public void Print() { Console.WriteLine("Print"); } } public class FooInterceptor : IFooInterceptor, IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine("Awesome"); invocation.Proceed(); } } public class Bar : IBar { public virtual IFoo MyFoo { get; set; } } class Program { static void Main(string[] args) { IWindsorContainer container = new WindsorContainer() .Register( Component.For<IBar>().ImplementedBy<Bar>().LifestyleTransient(), Component.For<IFoo>().ImplementedBy<Foo>().LifestyleTransient().Interceptors<IFooInterceptor>(), Component.For<IFooInterceptor>().ImplementedBy<FooInterceptor>().LifestyleTransient() ); var bar = container.Resolve<IBar>(); var foo = container.Resolve<IFoo>(); // this isn't null bar.MyFoo.Print(); // exception: bar.MyFoo is null Console.WriteLine("Done"); Console.ReadLine(); } } }
编辑: 我刚刚发现(大部分是偶然的)将拦截器配置从接口更改为具体类是可行的。但是,我正在注册拦截器及其接口,所以对原来的问题稍作修改:为什么接口规范会失败(默默地,不少于)?