依赖注入 - 复杂的单一实例应该由工厂提取吗?

时间:2018-01-15 09:34:52

标签: java c# dependency-injection factory

我使用严重依赖注入开发了一项服务。该服务在应用程序启动时一次性实例化,然后用作单例(不使用Singleton模式)。对它及其依赖项进行实例化是很复杂的:一些依赖项需要按正确的顺序进行多次修饰,一些依赖项实例需要通过其他几个依赖项共享,而有些则不应该。

我不使用依赖注入框架,也不打算使用它,以保持与应用程序的其余部分保持一致。目前,服务实例的方法如下:

private IMyService CreateMyService(IService service, ILoggerFactory logFactory, 
                                   IHttpClient client, IShareRessource sharedRessource)
{
     var decoratedClient = new Decorator3(new Decorator2(new Decorator1(client);
     var subService1 = new SubService1(sharedRessource, logFactory.Create());
     var subService2 = new SubService2(sharedRessource, logFactory.Create(), service);

     return new MyService(decoratedClient, subService1, subService2);
}

这是C#中的一个简化示例,但我的问题可以在其他语言中使用,例如Java。

即使服务在应用程序启动时一次性实例化,该方法是否应该封装在Factory类中?我的理解是,在需要的时候使用工厂在应用程序中多次创建实例。

在没有框架的情况下使用依赖注入时,您通常会实现复杂的服务吗?

1 个答案:

答案 0 :(得分:0)

最好的办法可能是使用MyService重构依赖性问题(订单共享实例等)。但也许这不是你的选择。

Spring等依赖注入框架支持使用Factory方法创建bean。

我认为工厂在这种情况下很好。