Tag: dependency injection

在独立的Java应用程序中使用Spring 3自动assembly

这是我的代码: public class Main { public static void main(String[] args) { Main p = new Main(); p.start(args); } @Autowired private MyBean myBean; private void start(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/config.xml"); System.out.println("my beans method: " + myBean.getStr()); } } @Service public class MyBean { public String getStr() { return "string"; } } <beans xmlns="http://www.springframework.org/schema/beans" […]

在NodeJS中是否需要dependency injection,或者如何处理…?

我目前正在用nodejs创build一些实验项目。 我已经用Spring编写了很多的Java EE Web应用程序,并且欣赏了dependency injection的简易性。 现在我很好奇:我如何做与节点dependency injection? 或者:我甚至需要它吗? 有没有一个替代的概念,因为编程风格是不同的? 我在谈论简单的事情,比如共享一个数据库连接对象,到目前为止,但我还没有find一个满足我的解决scheme。

Spring:命名空间vs contextConfigLocation web.xml中的init参数

我正在阅读Spring MVC的文档,我有一个关于init params的问题。 如果有问题,我正在使用Spring 3.2。 contextConfigLocation和名称空间有什么区别? contextConfigLocation仅用于指定上下文类可以findXML定义的文件夹,而namespace属性是用来指定文件名的? <servlet> <servlet-name>AppServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF</param-value> </init-param> <init-param> <param-name>namespace</param-name> <param-value>application-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 它是否正确? 应该使用/WEB-INF/application-context.xml吗? 而且你应该指定path?

为什么在这个例子中使用PerThreadLifetimeManager?

我正在关注下面的例子来设置统一与我的服务层一起工作。 我的项目设置与本文中的非常相似,除了为什么在注册服务依赖项时使用PerThreadLifetimeManager,我明白了一切。 请记住,我也在使用我的服务层中使用的通用存储库和unitofwork。 大多数统一的例子使用默认(瞬态)生存期pipe理器,因为我的设置类似于下面的我想知道为什么我应该使用PerThreadLifeimeManager? 如果改变了任何东西,我正在为当前表示层使用ASP.NET Web窗体项目。 container.RegisterType<ICatalogService, CatalogService>(new PerThreadLifetimeManager()) 在asp.net MVC 3中使用EF代码第一个dependency injection的存储库模式

dependency injection和JavaFX

由于JavaFX运行时想要实例化我的应用程序对象和我的所有控制器对象,我如何注入依赖关系到这些对象? 如果对象是由DI框架实例化的,就像Spring一样,框架将连接所有的依赖关系。 如果我手动实例化对象,我会通过构造函数参数提供依赖关系。 但是,我在JavaFX应用程序中做什么? 谢谢!

“混蛋注射”和“穷人注射”之间的真正区别是什么?

从“.NET中的dependency injection”一书中,我知道应该在应用程序的Composition Root上创build对象图,这在使用IoC容器时对我很有意义。 在所有应用程序中,当我尝试使用DI时,总会有两个构造函数:一个是依赖关系的参数,另一个是没有参数的“默认”构造函数,然后调用另一个“新build”所有的依赖关系,但在上述书中,这被称为“混蛋注入反模式”,这就是我所知道的“穷人的注射”。 现在考虑这一切,我会说,“穷人的注入”只是不使用IoC容器,而是用手在所述组合根上编码所有的对象图。 所以我的问题是: 我是否正确理解这些概念,还是完全偏离轨道? 如果仍然需要在IoC容器中注册所有依赖关系,而不是使用完全相同的Composition Root对它们进行编码,那么使用IoC容器的真正好处是什么? 如果我误解了“穷人注射”究竟是什么,请问有人能澄清吗? 谢谢

如何在ASP.NET Web窗体中使用dependency injection

我正在试图找出一种方法来使用ASP.NET Web窗体控件的dependency injection。 我有很多直接创build存储库的控件,并使用它们来访问和绑定数据等。 我正在寻找一种模式,我可以将库传递给控件(IoC),所以我的控件仍然不知道库的构build方式以及它们来自哪里等等。 我不希望从我的控件有一个依赖的IoC容器,因此我只是想能够构造具有构造函数或属性注入的控件。 (只是为了使事情复杂化,这些控件正在构build,并在运行时由CMS放置在页面上!) 有什么想法吗?

以使用知识库的工作模式为单位进行dependency injection

我想要创build一个工作单元类,以类似的方式围绕存储库。 我遇到的问题是试图通过用IRepository接口replace示例中的通用存储库来实现dependency injection。 在链接文章中的uow中,他们使用getter来检查版本库是否被实例化,如果没有,则实例化它。 public GenericRepository<Department> DepartmentRepository { get { if (this.departmentRepository == null) { this.departmentRepository = new GenericRepository<Department>(context); } return departmentRepository; } } 这是强烈耦合。 我可以看到两个方面。 使用构造函数注入。 使用setter注射。 1的问题是,如果我注入所有的存储库,我不得不实例化每个存储库,即使我没有在特定的工作单元中使用它们。 因此招致这样做的开销。 我想象的是使用一个数据库范围内的工作单元,所以这会导致大量的不必要的实例化和巨大的构造函数。 2的问题是很容易忘记设置和结束空参考例外。 在这种情况下是否有任何的最佳做法? 还有其他的select我错过了吗? 我只是进入dependency injection,并已经做了所有的研究,我可以find关于这个话题,但我可能会失去一些关键。

有没有解决ASP.NET MVC的ContactsManager教程中的dependency injection循环问题的好方法?

如果你不知道我在说什么,或者阅读本教程并尝试自己添加dependency injection,或者试着用我的解释来解决问题。 注意:此问题不在ASP.NET原始教程的范围内。 本教程只提示使用的模式是dependency injection友好的。 问题基本上是Controller,ModelStateWrapper和ContactManagerService之间存在依赖关系。 ContactController构造函数接受一个I​​ContactManagerService。 ContactManagerService构造函数接受一个I​​ContactManagerRepository (不重要)和一个IValidationDictionary (ModelStateWrapper实现) 。 ModelStateWrapper构造函数接受一个ModelStateDictionary (在控制器上是一个名为“ModelState”的属性) 。 因此,依赖循环如下所示:Controller> Service> ModelStateWrapper> Controller 如果您尝试向此添加dependency injection,它将失败。 所以我的问题是, 我该怎么办呢? 其他人已经发布了这个问题,但答案很less,不同,都似乎有点“黑客”。 我目前的解决scheme是从IService的构造函数中删除IModelStateWrapper,并像这样添加一个Initialize方法: public class ContactController : Controller { private readonly IContactService _contactService; public ContactController(IContactService contactService) { _contactService = contactService; contactService.Initialize(new ModelStateWrapper(ModelState)); } //Class implementation… } public class ContactService : IContactService { private IValidationDictionary […]

如何使用IOC从存储库中删除工作单元function

我有一个使用ASP.NET MVC,Unity和Linq到SQL的应用程序。 统一容器注册从System.Data.Linq.DataContextinheritance的typesAcmeDataContext ,并使用HttpContext与LifetimeManager 。 有一个控制器工厂使用统一容器获取控制器实例。 我在构造函数中设置了所有依赖关系,如下所示: // Initialize a new instance of the EmployeeController class public EmployeeController(IEmployeeService service) // Initializes a new instance of the EmployeeService class public EmployeeService(IEmployeeRepository repository) : IEmployeeService // Initialize a new instance of the EmployeeRepository class public EmployeeRepository(AcmeDataContext dataContext) : IEmployeeRepository 无论何时需要构造函数,统一容器都会parsing一个连接,该连接用于parsing数据上下文,然后是存储库,然后是服务,最后是控制器。 问题是IEmployeeRepository暴露了SubmitChanges方法,因为服务类没有DataContext引用。 我被告知应该从仓库外部pipe理工作单元,所以看起来我应该从仓库中删除SubmitChanges 。 这是为什么? 如果这是真的,这是否意味着我必须声明一个IUnitOfWork接口并使每个服务类都依赖于它? 我还可以如何让我的服务class来pipe理工作单位?