さまざまな理由で、プロジェクトを古いバージョンのCastleからv 2.5.3にアップグレードしようとしています(変更が壊れているため、v3に移行できません)。リモートにある汎用コンポーネントで問題が発生しています。
Container.Register(Component.For(typeof(IStore<>))
.Named("GenericStore")
.AddAttributeDescriptor("remoteserver", "RecoverableComponent")
.AddAttributeDescriptor("marshalByRefProxy", "true")
.ImplementedBy(typeof(MyStore<>)));
コンポーネントは正常に登録されているように見えますが、解決しようとした時点で次のようになります。
Container.Resolve<IStore<Users>>()
「同じキーを持つアイテムがすでに追加されている」という例外とスタックトレース(短縮)が発生します。
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.System.Collections.IDictionary.Add(Object key, Object value)
at Castle.Facilities.Remoting.RemotingInspector.ConfigureServerComponent(RemotingStrategy server, Type type, ComponentModel model)
at Castle.Facilities.Remoting.RemotingInspector.ProcessModel(IKernel kernel, ComponentModel model)
at Castle.MicroKernel.ModelBuilder.DefaultComponentModelBuilder.BuildModel(String key, Type service, Type classType, IDictionary extendedProperties)
at Castle.MicroKernel.Handlers.DefaultGenericHandler.GetSubHandler(CreationContext context, Type genericType)
at Castle.MicroKernel.Handlers.DefaultGenericHandler.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)
スタックトレースからわかるように、「モデルの構築」(DefaultComponentModelBuilderの呼び出し)が再び行われているように見えます。
コンポーネントを間違って登録していますか?
ソースコードをダウンロードして、自分が間違っていることを見つけようとしましたが、それが実際にGenericとRemotingの組み合わせによって引き起こされた問題であるかどうか疑問に思いますか?
例外は、 Castle.Facilities.Remoting.RemotingInspectorがすでに存在するExtendedPropertiesディクショナリにプロパティを追加しようとしたことが原因で発生します。Castle.MicroKernel.Handlers.DefaultGenericHanderでは、モデルがすでに存在するという事実を検出していないようです(それは私ですか、それともディクショナリtype2SubHandlerに実際に追加されたものではありませんか?)。
私が何か間違ったことをしているのか、それとも実際にバグがあるのか、誰か教えてもらえますか?