ナンシー0.7から0.12にアップグレードしようとすると奇妙な問題が発生します。以前は、ブートストラッパー内のすべてのサービスのログを記録する機能を登録していました。
protected override void ConfigureApplicationContainer(IWindsorContainer existingContainer)
{
existingContainer.AddFacility<LoggingFacility>();
existingContainer.Register(Component.For<LoggingInterceptor>());
...other registration
}
LoggingFacilityは次のようになります。
public class LoggingFacility : AbstractFacility
{
protected override void Init() { Kernel.ComponentRegistered += KernelComponentRegistered; }
static void KernelComponentRegistered(string key, IHandler handler)
{
if (!ShouldProxyComponent(handler))
return;
// Don't add more than one logging interceptor to a component
handler.ComponentModel.Interceptors.AddIfNotInCollection(InterceptorReference.ForType<LoggingInterceptor>());
}
static bool ShouldProxyComponent(IHandler handler)
{
//Don't log interceptors themselves
if (typeof(IInterceptor).IsAssignableFrom(handler.ComponentModel.Implementation))
return false;
//Don't put proxy around any late-bound (usually factory-created) component
if (handler.ComponentModel.Implementation == typeof(LateBoundComponent))
return false;
return true;
}
}
残念ながら、0.12 / Castle 3.1にアップグレードしてから、次の行でWindsorNancyBootstrapper.RegisterTypes
問題が発生しています。
container.Register(Component.For<Func<IRouteCache>>()
.UsingFactoryMethod(ctx => (Func<IRouteCache>) (ctx.Resolve<IRouteCache>)));
基本的に、CastleはFuncの周りに動的プロキシを作成しようとします。この登録が私の施設がサブスクライブしたイベントをトリガーした場合、これは問題ありませんが、そうではありません。それでも、インターセプターはとにかく登録されているようです。
MulticastDelgate(Func <>のILの親)が封印されているため、プロキシを作成しようとすると明らかに失敗します。TypeLoadExceptionアセンブリからタイプ'Castle.Proxies.Func`1Proxy'を読み込めませんでした'DynamicProxyGenAssembly2、Version = 0.0.0.0、Culture = neutral 、PublicKeyToken =a621a9e7e5c32e69'親タイプがシールされているため。
ここで何をするのかわかりませんが、FacilitiesとNancy 0.12の経験はありますか?