问题标签 [property-injection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

c# - 什么时候适合在依赖注入的类中使用本地默认值

想象下面的构造函数

什么时候适合创建这样的本地默认值?

并允许使用属性注入覆盖 IHttpClient 的依赖关系。

或者消费者有责任在构造函数中传递依赖而不依赖本地默认值?Mark Seemann 在他的书中描述了当有良好的本地默认值时属性注入是合适的,但我在这个示例中努力决定首先使用本地默认值是否合适。

0 投票
2 回答
2236 浏览

c# - 如何在 MVC Core 和 AutoFac 中使用属性注入

我可以在 MVC Core 中轻松使用构造函数参数注入。但是不支持属性注入。我尝试使用 AutoFac 但也失败了。
那么如何在 MVC Core 中使用属性注入。
这是 AutoFac 的代码

0 投票
0 回答
165 浏览

c# - 需要 CastleWindsor 属性注入的属性

尽管我更喜欢构造函数注入,但我希望团队中的开发人员能够使用属性注入,只要他们明确地将属性标记为可注入属性即可。根据这里的 CastleWindsor 文档,这应该可以通过创建贡献者然后通过内核调用 AddContributor 来实现。我似乎无法让它发挥作用。所有公共属性(即使是那些没有属性的)都被注入。

当我在贡献者 ProcessModel 方法中设置断点时,它会将具有该属性的所有属性设置为强制 (IsOptional = false) 并跳过任何不具有该属性的属性。但尽管如此,没有该属性的属性仍然会被注入。我究竟做错了什么?

下面是我的代码:

贡献者

属性

将贡献者添加到 Kernel.ComponentModelBuilder 并注册组件

第一类

Class1 中的 Class2 属性被注入,即使它没有使用 Injected 属性进行修饰。

我目前的解决方法是删除 CastleWindsor 的 PropertiesDependenciesModelInspector 并将其替换为强制 IsOptional 为假的实现。它可以工作,但它重复了很多 CW 的代码。如果我只能让它工作,我更喜欢使用上面的简单方法!

0 投票
2 回答
577 浏览

c# - 在过滤器属性中使用 Autofac 进行属性/方法注入

尝试使用 autofac 通过属性进行依赖注入。

该实例始终为空,并且没有注入依赖项。下面是需要注入属性的类。

我尝试了三种不同的方法来注入属性,但没有一个成功

方法一:

方法二:

方法3:

PS:欢迎上述方法注入。

0 投票
1 回答
59 浏览

c# - 在使用 IoC 的单例类中不断更改属性的最佳设计?

我有以下具有公共属性_variableHandler 的助手类。该属性是公共的,因为我最初设想在涉及 XAMLHelper 类中的方法之前从调用代码设置属性,但现在怀疑这是一种聪明的方法。主要是因为我需要经常调用该类,而不是总是更新 _variableHandler 的值,这意味着事情会变得一团糟。

我还有一个工厂,用于提供所需的 VariableTypeHandler 的具体实例。

我还使用 IoC 容器 (Unity) 来提供 XAMLHelper 类的单个实例,如下所示。

理想情况下,我想保留这个单一实例,但只需在使用下面的代码指定时更新 _variableHandler 的值。

我尝试将片段添加到容器注册中,例如

但这似乎并没有在第一次实例化后更新 _variableHandler 属性。我在这里错过了一些重要的事情吗?或者尝试做一些 IoC 容器不可能做的事情?

0 投票
1 回答
167 浏览

c# - 错误:HttpContext.Current 为空。|PerWebRequest生活方式 | 温莎城堡 | 穿线

我有 WCF 服务,并且在此服务中使用 MEF 我正在调用运行时类库。

我已经在这个类库中实现了 DI(castle Windsor),它在所有请求中都可以正常工作,但有时它会立即返回如下错误

“HttpContext.Current 为空。PerWebRequestLifestyle 只能在 ASP.Net 中使用”

我们已经应用了所有互联网解决方案,例如安装 Asp.net 功能,将 DI Lifecycle 从 LifestylePerWebRequest更改为scopehibridgeLifeStyle 等但没有找到下面的正确结果是我的代码

在此处输入图像描述


在此处输入图像描述

任何人都可以帮我解决这个问题。因为我是 DI 的新手,这不是生命周期问题、MEF 问题或线程问题,因为我正在调用这个类库来线程

提前致谢

0 投票
2 回答
3037 浏览

c# - 将配置文件中的连接字符串注入 EF Core DbContext

我需要为我的项目注入一个依赖项到我的 DbContext 类中。我试图以遵循“清洁架构”的方式来做到这一点。

我需要能够使用 DbContext 的空构造函数并仍然从配置文件中引用连接字符串。

我利用这个 Generic Repository 并将其注入到服务中。它在应用层中定义。

在我的 EF Core Context 类(在持久层中定义)我有这个:

我还在持久层中定义了 IConnectionStringProvider 的实现。如果需要,我希望这个实现可以轻松交换。目前它从 App.config 读取并使用 ConfigurationManager nuget 包。但这在未来可能会改变,因此它需要易于更换。

IConnectionStringProvider 在应用层定义:

在我的表示层中,我有一个 ASP.NET Core MVC 项目。在 StartUp.cs 中,我使用将 dbContext 注入到我的控制器的标准方法:

如果我以以下方式覆盖 OnModelCreatingMethod,我可以让它正常工作。

此方法允许我将配置中的连接字符串值与一个空的上下文构造函数实例一起使用,这是它与我的通用存储库一起使用所必需的,并且仍然能够使用带有 DbContextOptionsBuilder 参数的构造函数。

我唯一要解决的问题是如何在上下文不依赖于实现的情况下实现这一点。

我通过注册 IConnectionStringProvider 接口和实现以及使用属性“Autowired”注册 Context 类来尝试 Autofac 属性注入。但该属性始终为空。

是的,我知道上面是一个字段,而不是一个属性。我试图修改上下文类以具有属性而不是字段。我什至尝试创建一种方法来设置字段并使用 autofac 的方法注入。但是在每种情况下,属性/字段始终为空。

总之,我需要:

  1. 将连接字符串注入上下文
  2. 允许创建空的构造函数实例
  3. 保持“清洁架构”设计

这里的任何帮助将不胜感激。

谢谢。

0 投票
1 回答
1500 浏览

c# - 为什么在单元测试控制器方法时未初始化 IObjectMapper?

我正在为 ASP.NET Core 使用 ASP.NET 样板模板。我有一些已成功进行单元测试的应用程序服务。

我现在想测试一个使用这些应用程序服务的控制器方法。控制器方法包括如下映射操作:

执行此方法时,测试失败并出现异常:

消息:Abp.AbpException:应该实现 Abp.ObjectMapping.IObjectMapper 以映射对象。

有趣的是,堆栈跟踪以NullObjectMapper.Map.

AbpAutoMapper在单元测试模块中使用与Web.Mvc模块中使用的相同的初始化:

但是,在 MVC 应用程序的上下文中执行时,映射操作不会导致异常。

我未能Test在与 AutoMapper 相关的项目中初始化是什么?


我创建了一个重现项目。见链接。有一个名为GetFoos_Test测试控制器方法Index()的测试FoosController

根据@aaron 的回答,在控制器上注入 IObjectMapper 的属性确实解决了原始错误。但是,它不使用我正在尝试测试的映射。我在 MVC 模块的 Initialize 方法中创建了映射,如下所示:

0 投票
1 回答
60 浏览

c# - 如何为 Spring.Net 属性注入配置 xml 文件

我需要使用 spring.net 为接口的实现注入依赖项,使用属性注入。我不是很熟悉它,有人可以向我解释一下吗?

因此,在 config xml 文件中,对象是注入所需依赖项的类。所以 id 是该类的名称,但为什么不使用 name="PetStore" 代替呢?另外,类型是该类的完整路径,那么它后面的附加参数“PetStore”是什么?

关于属性, name 和 ref 指的是什么?名称是指在类“PetStore”中声明的属性,而 ref 是指接口的实现吗?

0 投票
1 回答
236 浏览

ios - 如何在 AppDelegate.swift 中正确地进行对象的属性注入

我尝试通过在应用程序启动时将其注入到RootViewController中,在AppDelegate.swift的didFinishLaunchingWithOptions中创建一次RootViewModel实例,因此它不会被多次创建。

这是代码片段:

RootViewModel是一个基本的swift 类,还没有实现,而RootViewController有一个可选的viewModel属性来允许注入。

var viewModel: RootViewModel?

这是我的问题:每次运行应用程序时,它都会停在我创建的fatalError处,以了解创建rootViewController是否一切顺利。所以,这意味着一切都不顺利。

我认为在创建rootViewController时 window 属性仍然为空,但我不知道如何解决这个问题。

我尝试在SceneDelegate中创建相同的东西,但没有成功。

我可以做些什么来解决这个问题?我正在使用 XCode 12.5 版