Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 依赖注入-在构造函数和容器之间的某个地方_Oop_Dependency Injection_Inversion Of Control - Fatal编程技术网

Oop 依赖注入-在构造函数和容器之间的某个地方

Oop 依赖注入-在构造函数和容器之间的某个地方,oop,dependency-injection,inversion-of-control,Oop,Dependency Injection,Inversion Of Control,我目前的情况是,我正在为一个小模块使用构造函数依赖项注入,该模块适合于更大的web框架 它的工作很好,但是现在引入了一个新类,需要向它传递两个对象。但是,其中一个对象需要进行大量的设置工作——本质上,它涉及4个方法调用,这些方法调用创建其他对象,以便使其进入工作状态,准备传递给我的对象 我的缺点是,由于所涉及的工作,构造函数注入是没有用的,但是引入ioc容器太过分了,特别是对于这个一次性用例 那么,这应该如何处理呢?在这两种选择的中间是否存在某种解决方案? 你已经有了45种选择: 穷人的DI(

我目前的情况是,我正在为一个小模块使用构造函数依赖项注入,该模块适合于更大的web框架

它的工作很好,但是现在引入了一个新类,需要向它传递两个对象。但是,其中一个对象需要进行大量的设置工作——本质上,它涉及4个方法调用,这些方法调用创建其他对象,以便使其进入工作状态,准备传递给我的对象

我的缺点是,由于所涉及的工作,构造函数注入是没有用的,但是引入ioc容器太过分了,特别是对于这个一次性用例

那么,这应该如何处理呢?在这两种选择的中间是否存在某种解决方案?

你已经有了45种选择:

  • 穷人的DI(手动创建对象并传递给构造函数)
  • IoC容器
  • 工厂法
  • 抽象工厂
  • 建筑商(谢谢,马克·希曼!)
我通常从一个IoC容器开始,但我做了大量的DI。(我见过太多紧密耦合的代码基。)

如果你不想引入IoC容器,我会倾向于穷人的DI

如果您使用的是任何面向对象语言(不仅仅是C),我建议您阅读本书。它详细介绍了模式和反模式。

您实际上有四种选择:

  • 穷人的DI(手动创建对象并传递给构造函数)
  • IoC容器
  • 工厂法
  • 抽象工厂
  • 建筑商(谢谢,马克·希曼!)
我通常从一个IoC容器开始,但我做了大量的DI。(我见过太多紧密耦合的代码基。)

如果你不想引入IoC容器,我会倾向于穷人的DI

如果您使用的是任何面向对象语言(不仅仅是C),我建议您阅读本书。它详细介绍了模式和反模式

其中1个对象需要进行大量的设置工作-基本上它涉及4个方法调用,这些方法调用创建其他对象,以便使其进入工作状态,准备传递给我的对象

好的,然后创建对象并将完全初始化的对象传递给构造函数,它需要在构造函数中运行

创建该对象听起来像是建筑商或工厂的工作

其中1个对象需要进行大量的设置工作-基本上它涉及4个方法调用,这些方法调用创建其他对象,以便使其进入工作状态,准备传递给我的对象

好的,然后创建对象并将完全初始化的对象传递给构造函数,它需要在构造函数中运行

创建该对象听起来像是建筑商或工厂的工作

我的难题是,由于工作原因,构造函数注入没有任何用处 涉及,

我更喜欢
构造函数注入
,并且认为没有理由避免它

使用现代IoC框架,您可以通过工厂/工厂方法指定涉及“大量设置工作”的创建逻辑

无论构建
IMyService
的实例需要多少步骤,您都可以简单地使用构造函数依赖项来注入它

container.AddFacility()
.登记(
Component.For().ImplementedBy(),
用于()的组件
.UsingFactoryMethod(k=>k.Resolve().Create())
);

var container=newunitycontainer();
container.RegisterType();
container.RegisterType(
新的InjectionFactory(c=>c.Resolve().Create());
我的难题是,由于工作原因,构造函数注入没有任何用处 涉及,

我更喜欢
构造函数注入
,并且认为没有理由避免它

使用现代IoC框架,您可以通过工厂/工厂方法指定涉及“大量设置工作”的创建逻辑

无论构建
IMyService
的实例需要多少步骤,您都可以简单地使用构造函数依赖项来注入它

container.AddFacility()
.登记(
Component.For().ImplementedBy(),
用于()的组件
.UsingFactoryMethod(k=>k.Resolve().Create())
);

var container=newunitycontainer();
container.RegisterType();
container.RegisterType(
新的InjectionFactory(c=>c.Resolve().Create());
相关:相关:
container.AddFacility<FactorySupportFacility>()
  .Register(
   Component.For<IMyFactory>().ImplementedBy<MyFactory>(),
   Component.For<IMyService>()
        .UsingFactoryMethod(k => k.Resolve<IMyFactory>().Create())
  );
var container = new UnityContainer();
container.RegisterType<IMyFactory, MyFactory>();
container.RegisterType<IMyService>(
    new InjectionFactory(c => c.Resolve<IMyFactory>().Create()));