私のプロジェクトでは、Spring 用に 2 つの構成があり、1 つはコードで、もう 1 つは xml です。コード コンテキストは、MockConfigurations クラスで定義されたモック オブジェクトを読み込みます。xml 構成は app.config で定義されます。コード構成の親としてxml構成を設定しています。
public static IApplicationContext GetMergedContainer()
{
var scanner = new AssemblyObjectDefinitionScanner();
scanner.IncludeType<MockConfigurations>();
var context = new CodeConfigApplicationContext(ContextRegistry.GetContext());
context.Scan(scanner);
context.Refresh();
return context;
}
Spring のドキュメント ( http://www.springframework.net/doc-latest/reference/html/web.html ) には次のように書かれています。オブジェクト定義が見つかるまで (または最終的に失敗して例外をスローするまで)、コンテキスト階層内で。
それは私にとってはうまくいきません:
var element = GetMergedContainer().GetObject<IElement>();
Spring.Objects.Factory.NoSuchObjectDefinitionException をスローします: '[名前空間].IElement' という名前のオブジェクトが定義されていません: 要求された型がコンテキストで定義されていません。
親からのオブジェクトの取得が正常に機能するかどうか:
var element = GetMergedContainer().ParentContext.GetObject<IElement>();
何か不足していますか?XML コンテキストをコード コンテキストの親として設定することに成功した人はいますか?
どんな助けでも大歓迎です。
前もって感謝します。
Spring.Core.1.3.2 と Spring.CodeConfig.1.0.4 を使用しています
[アップデート]
より単純なコードで状況を再現していました(http://www.springframework.net/codeconfig/refdoc/migration-example.html)
XML 構成をコード構成の親として再度配置し、XML (親) コンテキストにのみ存在するコード コンテキストからオブジェクトを解決しようとしました。
これは機能します:
ConsoleReport report = ctx["ConsoleReport"] as ConsoleReport;
ConsoleReport report = ctx.GetObject("ConsoleReport") as ConsoleReport;
これは失敗します:
ConsoleReport report = ctx.GetObject<ConsoleReport>();
エラーは次のとおりです。
Spring.Objects.Factory.NoSuchObjectDefinitionException は処理されませんでした メッセージ = 'Spring.Evaluation.ConsoleReport' という名前のオブジェクトが定義されていません: 要求された型がコンテキストで定義されていません。Source=Spring.Core.Configuration ObjectName=Spring.Evaluation.ConsoleReport StackTrace: at Spring.Context.ApplicationContextExtensions.GetObject[T](IApplicationContext context) in c:_prj\spring-net-codeconfig\src\Spring.Core.Configuration\ Context\Extension\ApplicationContextExtensions.cs: c:\users\oscar\documents\visual studio 2010\Projects\Spring.Evaluation\Spring.Evaluation\Program の Spring.Evaluation.Program.Main(String[] args) の 69 行目。 cs: System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) の 16 行目 System.AppDomain.ExecuteAssembly(String assemblyFile,
後者のアプローチを使用するプロジェクト (少し大きい) にコード構成を追加しようとしていますが、これらすべてのコード行をそのまま維持したいと考えています。