Tag: dependency injection

为什么我需要一个IoC容器而不是简单的DI代码?

我一直在使用dependency injection (DI)一段时间,注入或者在构造函数,属性或方法。 我从来没有觉得需要使用控制反转 (IoC)容器。 然而,我读得越多,我感受到社区使用IoC容器的压力越大。 我使用了.NET容器,如StructureMap , NInject , Unity和Funq 。 我仍然看不到IoC容器将如何使我的代码受益/改进。 我也害怕在工作中使用容器,因为我的许多同事都会看到他们不懂的代码。 他们中的许多人可能不愿意学习新技术。 请说服我,我需要使用一个IoC容器。 当我和我的同事在工作中交谈时,我会用这些论据。

泽西岛2.0的dependency injection

从头开始,没有任何以前的泽西岛1.x的知识,我很难理解如何在我的Jersey 2.0项目中设置依赖项注入。 我也明白HK2可以在泽西岛2.0,但我似乎无法find有助于泽西岛2.0集成的文件。 @ManagedBean @Path("myresource") public class MyResource { @Inject MyService myService; /** * Method handling HTTP GET requests. The returned object will be sent * to the client as "text/plain" media type. * * @return String that will be returned as a text/plain response. */ @GET @Produces(MediaType.APPLICATION_JSON) @Path("/getit") public String getIt() { return "Got […]

为什么不使用IoC容器来parsing实体/业务对象的依赖关系?

我了解DI背后的概念,但我只是了解不同的IoC容器可以做什么。 似乎大多数人主张使用IoC容器来连接无状态服务,但是如何将它们用于实体这样的有状态对象呢? 无论是对还是错,我通常都会对自己的实体进行行为,即使这种行为需要外部的类。 例: public class Order : IOrder { private string _ShipAddress; private IShipQuoter _ShipQuoter; public Order(IOrderData OrderData, IShipQuoter ShipQuoter) { // OrderData comes from a repository and has the data needed // to construct order _ShipAddress = OrderData.ShipAddress; // etc. _ShipQuoter = ShipQuoter; } private decimal GetShippingRate() { return _ShipQuoter.GetRate(this); } } 正如你所看到的,依赖关系是注入构造函数。 […]

dependency injection(DI)“友好”库

我正在思考一个C#库的devise,这将有几个不同的高级function。 当然,这些高级函数将尽可能地使用SOLID类devise原则来实现。 因此,可能会有定期直接使用消费者的类别,以及那些更常见的“最终用户”类别的“支持类别”。 问题是,devise库的最佳方式是什么? DI不可知论 – 尽pipe为一个或两个常见DI库(StructureMap,Ninject等)添加基本的“支持”似乎是合理的,但我希望消费者能够使用任何DI框架的库。 非DI可用 – 如果图书馆的消费者没有使用DI,图书馆应该尽可能地容易使用,从而减less用户为创build所有这些“不重要”的依赖而必须做的工作量他们想要使用的“真实”类。 我目前的想法是为通用的DI库(例如,一个StructureMapregistry,一个Ninject模块)以及一个非DI的集合类或工厂类提供一些“DI注册模块”,并且包含与这些less数工厂的耦合。 思考?

Spring JSF集成:如何在JSF托pipebean中注入Spring组件/服务?

我知道托pipebean像控制器一样工作,因为唯一的任务是将视图层与模型“链接”。 要使用bean作为托pipebean,我必须声明@ManagedBean注释,这样才能直接与bean通信。 如果我想在这个managedBean中注入一些组件(从Spring),我有两种可能的方式: selectManagedBean中的属性(如“BasicDAO dao”),并在属性上方声明@ManagedProperty(#{"basicDAO"}) 。 这样做,我在"basicDAO"从Spring注入bean "basicDAO" 。 在ManagedBean类中声明了@Controller,然后我将拥有@ManagedBean和@Controller注释。 而在"BasicDAO dao" @Autowired ,我必须使用Spring的@Autowired 。 我的理解是正确的吗?

每个Web请求一个DbContext …为什么?

我一直在阅读大量文章,解释如何设置entity framework的DbContext以便只使用各种DI框架为每个HTTP Web请求创build和使用一个。 为什么这是一个好主意呢? 使用这种方法你有什么好处? 是否有某些情况下这是一个好主意? 有没有事情,你可以使用这种技术,你不能做每个存储库方法调用实例化DbContext ?

是否有初始化通过DI容器创build的对象的模式

我想让Unity来pipe理我的对象的创build,我想有一些初始化参数,直到运行时才知道: 目前唯一能想到的方法是在界面上使用Init方法。 interface IMyIntf { void Initialize(string runTimeParam); string RunTimeParam { get; } } 然后使用它(在统一)我会这样做: var IMyIntf = unityContainer.Resolve<IMyIntf>(); IMyIntf.Initialize("somevalue"); 在这种情况下, runTimeParam参数是在运行时根据用户input确定的。 这里的小事情只是返回runTimeParam的值,但实际上这个参数是类似文件名的,初始化方法会对文件做一些事情。 这就产生了一些问题,即Initialize方法在接口上可用,可以多次调用。 在实现中设置一个标志,并抛出exception重复调用Initialize似乎是笨重的。 在我解决我的界面的时候,我不想了解IMyIntf的实现。 我所需要的是,这个接口需要一定的初始化参数。 有没有办法用这个信息注释(属性?)接口,并在创build对象时将它们传递给框架? 编辑:描述更多的接口。

Ioc / DI – 为什么我必须引用入口应用程序中的所有层/组件?

(与这个问题相关, EF4:为什么启用延迟加载时必须启用代理创build? )。 我是新来的DI,所以忍受着我…我明白,容器负责实例化所有我注册的types,但为了这样做,它需要参考我的解决scheme中的所有DLL和它们的引用。 如果我没有使用DI容器,我不需要在我的MVC3应用程序中引用EntityFramework库,只能引用我的DAL / Repo层的业务层。 我知道在一天结束的时候,所有的DLL都包含在bin文件夹中,但是我的问题是通过VS中的“添加引用”显式引用它,以便能够发布具有所有必要文件的WAP …

AngularJS:服务vs提供者vs工厂

AngularJS中的Service , Provider和Factory有什么区别?

什么是dependency injection?

已经发布了几个关于dependency injection的具体问题的问题,例如何时使用它以及它有哪些框架。 然而, 什么是dependency injection,什么时候/为什么应该或不应该被使用?