Questions tagged «dependency-injection»

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


7
如何使用@Value Spring注释注入地图?
如何在Spring中使用@Value批注将值从属性文件注入Map中? 我的Spring Java类是,我尝试使用$,但收到以下错误消息: 无法自动装配字段:私有java.util.Map Test.standard; 嵌套异常为java.lang.IllegalArgumentException:无法解析字符串值“ $ {com.test.standard}”中的占位符'com.test.standard' @ConfigurationProperty("com.hello.foo") public class Test { @Value("${com.test.standard}") private Map<String,Pattern> standard = new LinkedHashMap<String,Pattern> private String enabled; } 我在.properties文件中具有以下属性 com.test.standard.name1=Pattern1 com.test.standard.name2=Pattern2 com.test.standard.name3=Pattern3 com.hello.foo.enabled=true

5
如何在简单的php函数中使用“依赖注入”,我应该打扰吗?
我一直听到人们在谈论依赖注入及其带来的好处,但是我并不真正了解它。 我想知道这是否是“我一直将数据库连接作为参数传递”的解决方案。 我尝试阅读有关Wikipedia的条目,但是该示例是用Java编写的,因此我不太了解它试图阐明的区别。(http://en.wikipedia.org/wiki/Dependency_injection)。 我读了这篇php-dependency-injection-in文章(http://www.potstuck.com/2009/01/08/php-dependency-injection/),看来目标是不将依赖项传递给对象直接,但要封锁对象的创建及其依赖项的创建。我不确定如何在使用php函数的上下文中应用它。 此外,是否存在以下依赖关系注入,是否应该在功能上下文中尝试进行依赖关系注入? 版本1 :(我每天创建但不喜欢的那种代码) function get_data_from_database($database_connection){ $data = $database_connection->query('blah'); return $data; } 版本2 :(不必通过数据库连接,但也许不必进行依赖注入?) function get_database_connection(){ static $db_connection; if($db_connection){ return $db_connection; } else { // create db_connection ... } } function get_data_from_database(){ $conn = get_database_connection(); $data = $conn->query('blah'); return $data; } $data = get_data_from_database(); 版本3 :(“对象” /数据的创建是分开的,并且数据库代码仍然是,所以也许可以算作依赖注入?) …

6
Spring JUnit:如何在自动装配的组件中模拟自动装配的组件
我有一个要测试的Spring组件,该组件具有autowired属性,出于单元测试的目的,我需要更改该属性。问题是,该类在post-construct方法内部使用了自动装配的组件,因此在实际使用它之前,我无法替换它(即通过ReflectionTestUtils)。 我该怎么办? 这是我要测试的课程: @Component public final class TestedClass{ @Autowired private Resource resource; @PostConstruct private void init(){ //I need this to return different result resource.getSomething(); } } 这是一个测试用例的基础: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations= "classpath:applicationContext.xml") public class TestedClassTest{ @Autowired private TestedClass instance; @Before private void setUp(){ //this doesn't work because it's executed after the bean …

2
MEF为什么不是DI / IoC容器?
有人在博客圈和Microsoft自己说过,MEF并不是另一个IoC容器。 好...但是为什么呢?对我来说似乎一样。也许不如Unity或Castle Windsor好,但仍然符合定义,不是吗? MEF为什么没有Unity或Castle Windsor这样的IoC容器?

1
如何在.Net Core 3 Worker服务中设置应用程序设置
我一直在寻找有关阅读.Net Core 3中的appsettings.json 的许多教程和SO问题(例如App Settings .Net Core),在处理Worker服务时,我找不到任何有关操作方法的指针。没有启动方法。相反,我有一个带有main方法的Program.cs: public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); } 如何从.Net Core 3的Worker服务项目中的appsettings.json文件读取? 我添加了对使用.Net v4.8和另一个项目创建的自定义WCF客户端的引用,该项目仅在整个解决方案之间共享所有Busines域对象。我的解决方案主要是.Net v4.8,我想使用Worker Service。客户端项目通过代码在内部创建WCF客户端,因此所有绑定和端点都是可配置的。如果这是一个.Net v4.8项目,则将以下内容添加到app.config中: <appSettings> ... <add key="AminServiceUri" value="http://localhost:45108/ServiceHost/v1/AminService.svc" /> <add key="BillServiceUri" value="http://localhost:45108/ServiceHost/v1/BillService.svc" …

2
在Angular 8和9中提供和注入“窗口”与窗口之间有什么区别?
我有两个使用这些版本的Angular项目: 9.0.0-下一个6 8.1.0 在版本9中,我使用它来提供和注入window对象: @NgModule({ providers: [ { provide: Window, useValue: window }, ] }) export class TestComponent implements OnInit { constructor(@Inject(Window) private window: Window) } 哪个工作正常。 将这种方法用于版本8会在编译期间引发警告和错误: 警告:无法解析TestComponent的所有参数…… 我通过使用单引号解决了它,如下所示: @NgModule({ providers: [ { provide: 'Window', useValue: window }, ] }) export class TestComponent implements OnInit { constructor(@Inject('Window') private window: …

3
除了将所有内容添加到Startup类之外,还有一种健壮的方法来在ASP.NET Core 3.1中注册依赖项吗?
我有一个ASP.NET Core 3.1项目。通常,我使用类中的ConfigureServices()方法注册任何依赖Startup.cs项。 但是,我发现自己不得不注册许多依赖项,而且ConfigureServices()看起来很大!我知道我可以创建一个静态方法的扩展方法,并从ConfigureService()类中调用它,但是想知道是否有更好的方法。 如果有一种方法可以在IoC容器中注册依赖项,而不必一次定义它们 services.AddScoped<Interface, Class>(); .... 200 lines later services.AddScoped<ISettings, Settings>()

3
Python中的工厂方法与注入框架-什么更清洁?
我通常在应用程序中执行的操作是,使用工厂方法创建所有服务/ dao / repo / clients class Service: def init(self, db): self._db = db @classmethod def from_env(cls): return cls(db=PostgresDatabase.from_env()) 当我创建应用程序时 service = Service.from_env() 什么创建所有依赖关系 在测试中,当我不想使用真正的数据库时,我只做DI service = Service(db=InMemoryDatabse()) 我想这与clean / hex体系结构相差很远,因为Service知道如何创建数据库并知道它创建哪种数据库类型(也可以是InMemoryDatabse或MongoDatabase) 我想在干净/十六进制架构中 class DatabaseInterface(ABC): @abstractmethod def get_user(self, user_id: int) -> User: pass import inject class Service: @inject.autoparams() def __init__(self, db: …

2
配置服务时如何在具有依赖关系注入的Azure Function V3中注入或使用IConfiguration
通常,在.NET Core项目中,我会创建一个“ boostrap”类来配置我的服务以及DI注册命令。这通常是一种扩展方法,IServiceCollection可以在其中调用类似的方法,.AddCosmosDbService并且在包含该方法的静态类中,所有必需的东西都是“自包含的”。但是关键是该方法IConfiguration从Startup类中。 我过去曾在Azure Functions中使用过DI,但尚未遇到此特定要求。 我正在使用IConfiguration绑定到属性与我两个都匹配的具体类local.settings.json当在Azure中部署功能时,以及开发/生产应用程序设置。 CosmosDbClientSettings.cs /// <summary> /// Holds configuration settings from local.settings.json or application configuration /// </summary> public class CosmosDbClientSettings { public string CosmosDbDatabaseName { get; set; } public string CosmosDbCollectionName { get; set; } public string CosmosDbAccount { get; set; } public string CosmosDbKey { get; …
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.