我有一個奇怪的問題,試圖從南希0.7升級到0.12。以前我是註冊機構爲我的我的引導程序中的所有服務做記錄:城堡溫莎設施不與南希溫莎Bootstrapper很好玩
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 /城堡3.1,在WindsorNancyBootstrapper.RegisterTypes
以下行導致一些問題
container.Register(Component.For<Func<IRouteCache>>()
.UsingFactoryMethod(ctx => (Func<IRouteCache>) (ctx.Resolve<IRouteCache>)));
基本上,Castle試圖圍繞Func創建一個動態代理。如果此註冊觸發了我的設施訂閱的事件,那麼這樣可以,但事實並非如此。但攔截器似乎無論如何都是註冊的。
當試圖創建它顯然失敗的代理因爲MulticastDelgate(IL的父爲函數功能<>)被密封: TypeLoadException 未能加載從組件類型「Castle.Proxies.Func`1Proxy」「DynamicProxyGenAssembly2,版本= 0.0 .0.0,Culture = neutral,PublicKeyToken = a621a9e7e5c32e69',因爲父類型是密封的。
我不確定這裏有什麼,沒有人有設施和南希0.12的任何經驗嗎?