4

私のプロジェクトでは、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,

後者のアプローチを使用するプロジェクト (少し大きい) にコード構成を追加しようとしていますが、これらすべてのコード行をそのまま維持したいと考えています。

4

0 に答える 0