Questions tagged «dependency-injection»

通过动态地将其需要起作用的依赖项注入软件组件来减少组件之间的耦合的设计模式。

8
如何将值传递给wcf服务上的构造函数?
我想将值传递到实现我的服务的类的构造函数中。 但是,ServiceHost仅允许我传递要创建的类型的名称,而不允许将什么参数传递给其构造方法。 我希望能够传入创建我的服务对象的工厂。 到目前为止,我发现了什么: WCF依赖注入行为,这超出了我的期望,而且似乎对我的需求而言过于复杂。

9
如何在WPF / MVVM应用程序中处理依赖项注入
我正在启动一个新的桌面应用程序,我想使用MVVM和WPF进行构建。 我也打算使用TDD。 问题是我不知道如何使用IoC容器将依赖项注入生产代码中。 假设我具有以下类和接口: public interface IStorage { bool SaveFile(string content); } public class Storage : IStorage { public bool SaveFile(string content){ // Saves the file using StreamWriter } } 然后我有另一个具有IStorage依赖关系的类,还假设该类是ViewModel或业务类... public class SomeViewModel { private IStorage _storage; public SomeViewModel(IStorage storage){ _storage = storage; } } 有了这个,我可以轻松地编写单元测试,以确保它们能够正常工作,例如使用模拟等。 问题是要在实际应用程序中使用它。我知道我必须有一个链接IStorage接口的默认实现的IoC容器,但是我该怎么做呢? 例如,如果我具有以下xaml,将如何处理: <Window …

2
如何在Android项目中从头开始设置DAGGER依赖项注入?
如何使用匕首?如何配置Dagger在我的Android项目中工作? 我想在我的Android项目中使用Dagger,但我感到困惑。 编辑:Dagger2也自2015年04月15日起退出市场,这更加令人困惑! [[这个问题是一个“存根”,随着我对Dagger1的了解更多,对Dagger2的了解,我正在添加这个答案。这个问题更多地是一个指南,而不是一个“问题”。]

6
Google Guice与PicoContainer进行依赖注入
我的团队正在研究依赖项注入框架,并试图在使用Google-Guice和PicoContainer之间做出选择。 我们正在寻找框架中的几件事情: 较小的代码占用空间-我所说的较小的代码占用空间是我们不想在我们的代码库中到处都有依赖项注入代码垃圾。如果需要在将来进行重构,我们希望它尽可能简单。 性能-创建和注入对象时,每个框架有多少开销? 易于使用-学习曲线是否很大?我们是否必须编写大量代码才能使某些简单工作起作用?我们希望配置尽可能少。 社区规模-较大的社区通常意味着将继续维护项目。我们不想使用框架,而不得不修复我们自己的错误;)此外,框架的开发人员/用户社区也可以(希望)回答我们所遇到的任何问题。 将两个框架与所列标准进行比较将不胜感激。任何有助于将两者进行比较的个人经验也将非常有帮助。 免责声明:我对依赖注入还很陌生,因此如果我提出的问题与本次讨论无关,请原谅我。

6
将数据传递到“路由器出口”子组件
我有一个去服务器的父组件并获取一个对象: // parent component @Component({ selector : 'node-display', template : ` <router-outlet [node]="node"></router-outlet> ` }) export class NodeDisplayComponent implements OnInit { node: Node; ngOnInit(): void { this.nodeService.getNode(path) .subscribe( node => { this.node = node; }, err => { console.log(err); } ); } 在以下几种子显示之一中: export class ChildDisplay implements OnInit{ @Input() node: …

4
Symfony 2 EntityManager注入服务
我已经创建了自己的服务,并且需要注入原则EntityManager,但是我没有看到__construct()在我的服务上调用该方法,并且注入不起作用。 这是代码和配置: <?php namespace Test\CommonBundle\Services; use Doctrine\ORM\EntityManager; class UserService { /** * * @var EntityManager */ protected $em; public function __constructor(EntityManager $entityManager) { var_dump($entityManager); exit(); // I've never saw it happen, looks like constructor never called $this->em = $entityManager; } public function getUser($userId){ var_dump($this->em ); // outputs null } } …


3
AngularJS种子:将JavaScript放入单独的文件(app.js,controllers.js,directives.js,filters.js,services.js)
我正在使用角度种子模板来构建我的应用程序。最初,我将所有JavaScript代码放入一个文件中main.js。该文件包含我的模块声明,控制器,指令,过滤器和服务。该应用程序可以像这样正常运行,但是随着我的应用程序变得越来越复杂,我担心可伸缩性和可维护性。我注意到,每个角度种子模板都有单独的文件,因此我尝试将我的代码从单个main.js文件分发到该问题标题中提到的每个其他文件中,并且可以在app/js每个角度的目录中找到种子模板。 我的问题是:如何管理依赖关系以使应用程序正常工作?在这方面,此处找到的现有文档不是很清楚,因为给出的每个示例都显示一个JavaScript源文件。 我所拥有的一个例子是: app.js angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.controllers']); controllers.js angular.module('myApp.controllers', []). controller('AppCtrl', [function ($scope, $http, $filter, MyService) { $scope.myService = MyService; // found in services.js // other functions... } ]); filter.js angular.module('myApp.filters', []). filter('myFilter', [function (MyService) { return function(value) { if (MyService.data) { // test to ensure service is loaded …

7
我可以将构造函数参数传递给Unity的Resolve()方法吗?
我正在使用Microsoft的Unity进行依赖项注入,并且我想执行以下操作: IDataContext context = _unityContainer.Resolve<IDataContext>(); var repositoryA = _unityContainer.Resolve<IRepositoryA>(context); //Same instance of context var repositoryB = _unityContainer.Resolve<IRepositoryB>(context); //Same instance of context IDataContext context2 = _unityContainer.Resolve<IDataContext>(); //New instance var repositoryA2 = _unityContainer.Resolve<IRepositoryA>(context2); RepositoryA并且RepositoryB都有一个构造函数的IDataContext参数,我想团结与我通过它的上下文初始化存储库。另请注意,该代码IDataContext未在Unity中注册(我不需要3个实例IDataContext)。

7
从@ComponentScan中排除@Component
我有一个要从@ComponentScan特定对象中排除的组件@Configuration: @Component("foo") class Foo { ... } 否则,它似乎与我项目中的其他班级发生冲突。我不完全了解碰撞,但是如果我注释掉@Component注释,事情就会像我希望的那样工作。但是依赖该库的其他项目希望此类由Spring管理,因此我只想在我的项目中跳过它。 我尝试使用@ComponentScan.Filter: @Configuration @EnableSpringConfigured @ComponentScan(basePackages = {"com.example"}, excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)}) public class MySpringConfiguration {} 但它似乎不起作用。如果尝试使用FilterType.ASSIGNABLE_TYPE,则会收到一个奇怪的错误,提示您无法加载一些看似随机的类: 原因:java.io.FileNotFoundException:类路径资源[junit / framework / TestCase.class]无法打开,因为它不存在 我也尝试type=FilterType.CUSTOM如下使用: class ExcludeFooFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { return metadataReader.getClass() == Foo.class; } } @Configuration …

6
重新打开并将依赖项添加到已经引导的应用程序中
有没有办法向已经自举的角度模块注入后期依赖关系?这就是我的意思: 假设我有一个网站范围的角度应用程序,定义为: // in app.js var App = angular.module("App", []); 在每个页面中: <html ng-app="App"> 稍后,我将重新打开该应用程序以根据当前页面的需求添加逻辑: // in reports.js var App = angular.module("App") App.controller("ReportsController", ['$scope', function($scope) { // .. reports controller code }]) 现在,假设逻辑的那些点播位的是一个还需要自己的依赖关系(如ngTouch,ngAnimate,ngResource,等)。如何将它们附加到基本应用程序?这似乎不起作用: // in reports.js var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped …

2
如何从Guice的注射器中获取带注释的实例?
假设我有一个模块: Module extends AbstractModule { @Override protected void configure() { bind(String.class). annotatedWith(Names.named("annotation")). toInstance("DELIRIOUS"); } } 我想测试模块并检查它是否在没有类和字段但直接从注入器获取值的带String注释的字段中注入正确的值Names.named("annotation"): @Test public void test() { Injector injector = Guice.createInjector(new Module()); // THIS IS NOT GOING TO WORK! String delirious = injector.getInstance(String.class); assertThat(delirious, IsEqual.equalTo("DELIRIOUS"); }

7
依赖注入和单例设计模式
我们如何确定何时使用依赖注入或单例模式。我在许多网站上都读过,他们说“对单例模式使用依赖注入”。但是我不确定我是否完全同意他们的观点。对于我的中小型项目,我肯定看到单例模式的使用很简单。 例如记录器。我可以使用Logger.GetInstance().Log(...) But,而不是使用它,为什么我需要使用记录器的实例注入我创建的每个类?

2
Reader Monad用于依赖性注入:多个依赖性,嵌套调用
当被问及Scala中的依赖注入时,有很多答案指向使用Reader Monad,要么是Scalaz的,要么是自己滚动的。有很多非常清晰的文章描述了该方法的基础(例如Runar的演讲,Jason的博客),但是我没有找到一个更完整的示例,而且我看不到该方法相对于其他方法的优势。传统的“手动” DI(请参阅我编写的指南)。我很可能错过了一些重要的观点,因此提出了问题。 举例来说,假设我们有以下类: trait Datastore { def runQuery(query: String): List[String] } trait EmailServer { def sendEmail(to: String, content: String): Unit } class FindUsers(datastore: Datastore) { def inactive(): Unit = () } class UserReminder(findUser: FindUsers, emailServer: EmailServer) { def emailInactive(): Unit = () } class CustomerRelations(userReminder: UserReminder) { def retainUsers(): …

9
Python依赖注入的方式是什么?
介绍 对于Java,依赖注入作为纯OOP工作,即,您提供要实现的接口,并且在框架代码中接受实现已定义接口的类的实例。 现在,对于Python,您可以以相同的方式进行操作,但是对于Python,我认为该方法的开销太大。那么,您将如何以Pythonic的方式实现它呢? 用例 说这是框架代码: class FrameworkClass(): def __init__(self, ...): ... def do_the_job(self, ...): # some stuff # depending on some external function 基本方法 最幼稚(也许是最好的?)方法是要求将外部函数提供给FrameworkClass构造函数,然后从do_the_job方法中。 框架代码: class FrameworkClass(): def __init__(self, func): self.func = func def do_the_job(self, ...): # some stuff self.func(...) 客户代码: def my_func(): # my implementation framework_instance = FrameworkClass(my_func) …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.