次のシナリオがあります。
public interface IFoo
{
void Foo1();
void Foo2();
}
public abstract class Foo : IFoo
{
public void Foo1() { }
public abstract void Foo2();
}
Fooによって実装されたIFooのサービスを登録したいのですが、実装されていない抽象メンバーへの呼び出しを処理するインターセプターを使用します。だから、私はすることができます:
container.Register(Component.For<IFoo>()
.ImplementedBy<Foo>().Interceptors<MyInterceptor>());
しかし、コンポーネントをアクティブ化しようとすると、次の例外が発生します。
"Instances of abstract classes cannot be created."
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstance(CreationContext context, Object[] arguments, Type[] signature)
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiate(CreationContext context)
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCreate(CreationContext context)
at Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext context)
at Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationContext context)
at Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext context, Boolean requiresDecommission, Boolean instanceRequired)
at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext context, Boolean instanceRequired)
at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext context)
at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveServiceDependency(CreationContext context, ComponentModel model, DependencyModel dependency)
以下が正常に機能することに気づきました。
Component.For<Foo>().Forward<IFoo>().Interceptors<MyInterceptor>()
しかし、その後、インターセプターは、インターセプト時にTargetTypeとしてIFooではなくFooを見ることになります...これは、私が望んでいることではありません。
これを達成する方法について何か提案はありますか?
ありがとう。