.NET 3.5から.NET 4へのソリューションをアップグレードしました 同時に、Castleを2.5からアップグレードするように、すべての外部ライブラリを最新バージョンにアップグレードしました。Castle 3.0にアップグレードした後でComponentResolutionExceptionが発生しました
[Castle.MicroKernel.ComponentResolutionException] { "のため スコープを取得できませんでした:私は私が解決しようとすると、今の例外をスローDBアクセスを登録するいくつかのコードをしましたV3.0
から2コンポーネントDF.MailFlowAdapter。これはおそらく、カスタムIScopeAccessorの バグ、または
:アクセスコンポーネントが、この方法で登録されているContainer .AddFacility<WcfFacility>() .AddFacility<DataAccessAdapterFacility>() .Register(Component .For<SD.LLBLGen.Pro.ORMSupportClasses.IDataAccessAdapter>() .ImplementedBy<MailFlowAdapter>() .LifeStyle.PerWcfOperation())
"} Castle.MicroKernel.ComponentResolutionException(ウェブ要求 等の当たりウェブリクエスト成分 外等)範囲外 成分スコープ
問題はPerWcfOperation LifeStyleに由来しますが、理由はわかりません。プロジェクトはWCFプロジェクトであり、WCFメソッドを呼び出すときにコンポーネントが解決されます。 この登録は、Castle 2.5を使用するブランチで正常に動作しています。
IDataAccessAdapter(db内のlogin/pwdをチェックするため)を解決するため、wcf login/pwdの検証(UserNamePasswordValidatorを使用するIAuthorizationPolicyで)例外がスローされます。情報の
その他の作品:
DataAccessAdapterFacilityコンポーネントアクチベーターを登録し、古いコードであるmodel.Serviceがmodel.Servicesに変更されたため、私は少しデコードを変更する必要がありました:
void Kernel_ComponentModelCreated(ComponentModel model)
{
foreach (var service in model.Services)
{
if (service == typeof(SD.LLBLGen.Pro.ORMSupportClasses.IDataAccessAdapter))
{
model.CustomComponentActivator = typeof(DataAccessAdapterActivator);
}
}
}
そして、 DataAccessAdapterActivatorは、設定ファイル内の接続文字列を使用してオブジェクトを作成することを担当しています。
protected override object InternalCreate(CreationContext context)
{
var connectionString = string.Empty;
if (ConfigurationManager.ConnectionStrings["Main"] != null)
connectionString = ConfigurationManager.ConnectionStrings["Main"].ConnectionString;
return new MailFlowAdapter(connectionString);
}
私は、 DataAccessAdapterFacility/DataAccessAdapterActivatorを使用したeはFactoryを使用して単純化することができますが、ここでは問題にはなりません:)
なぜPerWcfOperationライフスタイルを使用できないのか考えている人はいますか?