私は Delphi Spring Framework を使い始めたばかりで、現在のバージョンの DI コンテナーで、実装型を指定せずにファクトリ メソッドに構築を委譲できるかどうか疑問に思っていました。
たとえば、これに似たもの:
GlobalContainer
.RegisterFactory<ISomeObject>(
function: ISomeObject
begin
Result := CreateComObject(CLASS_SomeObject) as ISomeObject;
end)
.Implements<ISomeObject> // could probably be implied from the above
.AsSingletonPerThread;
ご覧のとおり、私の具体的なユース ケースは、COM オブジェクトのインスタンス化です。その場合、関心のあるインターフェイスを実装するクラスはアプリケーションの一部ではありませんが、CreateComObject
/を呼び出してインスタンスを作成することはできますCoCreateInstance
。ただし、コンテナ内の登録は常に実際の実装クラスにバインドされているように見えるため、運が悪いようです。
現時点でこれが不可能であると仮定すると、専門家はこれにどのように対処しますか? ラッパー クラスまたはダミー クラスを作成しますか、それとも単に COM オブジェクトを DI コンテナーから除外し、単純にインスタンス化しますCreateComObject
か?