我刚开始使用 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
。但是,似乎我不走运,因为 Container 中的注册似乎总是绑定到实际的实现类。
假设目前这是不可能的,那么你们那里的专家将如何解决这个问题?您会创建一个包装类或虚拟类,还是只是将 COM 对象排除在 DI 容器之外并简单地通过实例化它们CreateComObject
?