0

次のようにジェネリッククラスを登録しようとしています:

builder.RegisterGeneric(typeof(WindowContext<>))
    .AsSelf()
    .As<IWindowContext>()
    .InstancePerLifetimeScope();

( WindowContext<T> : IWindowContext)

上記の登録により、ArgumentExceptionオン ビルドが発生します:サービス 'Inforbase.Presentation.IWindowContext' は、オープン ジェネリック型定義ではありません。

WindowContext<T>予想される動作は、コンポジション ルートに最も近い への依存関係が、IWindowContextそのライフタイム スコープ内のいずれかに対して解決されるインスタンスを定義することです。

この概念は少し奇妙で、同じライフタイム スコープ内の 2 つのクラスが異なるタイプのWindowContext<T>. 私のシナリオでは、エラーまたは上書きの両方が許容されます。

これはAutofacで可能ですか?

4

1 に答える 1

0

私が求めていることは本当に意味がないことに気づきました。ディペンデンシー グラフのコンポジション ルートから最も離れたオブジェクトは、最初に作成する必要があるオブジェクトであり、解決IWindowContextされた時点で の具象型が存在しないため、を解決できIWindowContextません。まだ定義されていません。

おそらく最善の方法は、WindowContext を非ジェネリックにすることで、クラス構造を再編成することです。幸いなことに、これは単なる実験であり、私のアーキテクチャで実際に必要なものではありません。

于 2013-05-30T12:46:08.777 に答える