Dependency injection 工厂相对于直接依赖注入的好处

Dependency injection 工厂相对于直接依赖注入的好处,dependency-injection,unity-container,factory,Dependency Injection,Unity Container,Factory,我遇到了这段代码: public class SomeServiceFactory : ISomeServiceFactory { private IUnityContainer container; public SomeServiceFactory(IUnityContainer unityContainer) { this.container = unityContainer; } public virtual ISomeServ

我遇到了这段代码:

public class SomeServiceFactory : ISomeServiceFactory
{
    private IUnityContainer container;

    public SomeServiceFactory(IUnityContainer unityContainer)
    {
        this.container = unityContainer;
    }

    public virtual ISomeService GetSomeService()
    {
        return this.container.Resolve<ISomeService>();
    }
}
公共类SomeServiceFactory:ISomeServiceFactory
{
专用IUnityContainer容器;
公共服务工厂(IUnityContainer unityContainer)
{
this.container=unityContainer;
}
公共虚拟服务GetSomeService()
{
返回此.container.Resolve();
}
}
我试图理解这种模式如何比直接向该工厂的消费者注入
isomservice
更有用?因此,成为服务本身的消费者,而不是工厂。这个附加的间接层实现了什么


我理解,如果创建
ISomeService
需要更复杂的逻辑,而
container.Resolve
无法实现,那么肯定需要一个工厂。

好问题。没有上下文信息,很难捍卫这样一个退化的抽象工厂

有时,这样做的原因可能是编写此工厂消费者的程序员知道必须为每次使用重新创建
isomservice
实现;也许那个特定的实现不是线程安全的

此外,
ISomeService
可能源于
IDisposable
,客户端可能会执行以下操作:

using (var svc = this.factory.GetSomeService())
{
    // use svc here...
}
这将导致
svc
在使用后得到正确处置

以上所有内容都是漏洞百出的抽象,但仍然很常见

处理此类生命周期和资源管理问题的更好方法是通过或

然而,这仍然需要您拥有类似于
SomeServiceFactory
的类,但是,例如,支持Decoraptor


但是,请注意,这个特定的抽象工厂是退化的,因为它不接受方法参数。另一方面,具有一个或多个方法参数的抽象工厂是一个抽象工厂