- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我将这些属性应用于某些服务,然后将其注入(inject) DI,我正在尝试确定将使用哪个 CallerMemberName
或 CallerFilePath
值。例如:
public class MyService: IMyService
{
public MyService([CallerMemberName] string name = null)
{
var name = name; // name is always null here
}
}
...
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IMyService, MyService>();
}
}
所以,我想,它是 name
变量的期望值还是我做错了什么?在这种情况下,我该如何使用 CallerMemberName
?无论如何,这可能吗?
最佳答案
I'm trying to figure out which
CallerMemberName
orCallerFilePath
value will be used if I'll apply these attributes to some service and then inject it into DI.
你不能。您的方法行不通,因为 ASP.NET Core (Microsoft.Extensions.DependencyInjection
) 使用的默认 DI 系统使用动态注册,这意味着 AOT(C#-to -IL) 和 JIT(IL-to-x64)编译器都不知道 DI 服务的消费者(注意虽然注册在概念上是静态的并且只能在启动时执行 - 它只是一个错觉:您可以在运行时轻松破解默认的 DI 容器)。
作为侧边栏:唯一您的方法可行的时间是如果您有某种代码生成系统来在构建时创建对象工厂和服务工厂不使用任何运行时反射或 IL 生成。在实践中,你看到这种方法的唯一地方是在单元测试代码中使用它,测试需要严格控制每个依赖项——但它们通常是手工编写的,非常乏味和脆弱。通过 Roslyn 代码生成,我希望看到 static 服务工厂开始被更多地使用,因为它为您提供编译时保证每个依赖项都可用 - 这样您就不会在运行时遇到任何令人讨厌的意外缺少依赖项。
[CallerMemberName]
和 [CallerFilePath]
属性是由 AOT 编译器填充的,而不是 JIT 编译器,即使它是由 JIT 编译器填充的,它也不会这无济于事,因为 DI 服务的消费者不是服务构造函数的调用者。
am I doing something wrong?
你是。由于我上面描述的原因。
How do I work with
CallerMemberName
in that case?
你不能。 CallerMemberNameAttribute
不适用于此目的。它旨在用于快速简便的日志记录、分析和跟踪。
Is it possible, anyway?
是 - 通过正确扩展 Microsoft.Extensions.DependencyInjection
。请阅读 MEDI 文档以获取更多详细信息。
关于c# - 获取 .net 核心中注入(inject)服务的调用方信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66332065/
我正在尝试测试依赖于其他服务 authService 的服务 documentViewer angular .module('someModule') .service('docu
如果我的网站上线(不要认为它会,目前它只是一个学习练习)。 我一直在使用 mysql_real_escape_string();来自 POST、SERVER 和 GET 的数据。另外,我一直在使用 i
我有以下代码,它容易受到 SQL 注入(inject)的攻击(我认为?): $IDquery = mysqli_query($connection, "SELECT `ID` FROM users W
我一直在自学如何创建扩展,以期将它们用于 CSS 注入(inject)(以及最终以 CSS 为载体的 SVG 注入(inject),但那是以后的问题)。 这是我当前的代码: list .json {
这个简单的代码应该通过 Java Spring 实现一个简单的工厂。然而结果是空指针,因为 Human 对象没有被注入(inject)对象(所以它保持空)。 我做错了什么? 谢谢 配置 @Config
我正在编写一个 ASP.NET MVC4 应用程序,它最终会动态构建一个 SQL SELECT 语句,以便稍后存储和执行。动态 SQL 的结构由用户配置以用户友好的方式确定,具有标准复选框、下拉列表和
首先让我说我是我为确保 SQL 注入(inject)攻击失败而采取的措施的知己。所有 SQL 查询值都是通过事件记录准备语句完成的,所有运算符(如果不是硬编码)都是通过数字白名单系统完成的。这意味着如
这是 SQL 映射声称可注入(inject)的负载: user=-5305' UNION ALL SELECT NULL,CONCAT(0x716b6b7071,0x4f5577454f76734
我正在使用 Kotlin 和 Android 架构组件(ViewModel、LiveData)构建一个新的 Android 应用程序的架构,并且我还使用 Koin 作为我的依赖注入(inject)提供
假设 RequestScope 处于 Activity 状态(使用 cdi-unit 的 @InRequestScope) 给定 package at.joma.stackoverflow.cdi;
我有一个搜索表单,可以在不同的提供商中搜索。 我从拥有一个基本 Controller 开始 public SearchController : Controller { protected r
SQLite 注入 如果您的站点允许用户通过网页输入,并将输入内容插入到 SQLite 数据库中,这个时候您就面临着一个被称为 SQL 注入的安全问题。本章节将向您讲解如何防止这种情况的发生,确保脚
我可以从什么 dll 中获得 Intercept 的扩展?我从 http://github.com/danielmarbach/ninject.extensions.interception 添加了
使用 NInject 解析具有多个构造函数的类似乎不起作用。 public class Class1 : IClass { public Class1(int param) {...} public
我有一个 MetaManager 类: @Injectable() export class MetaManager{ constructor(private handlers:Handler
我是 Angular 的新手,我不太清楚依赖注入(inject)是如何工作的。我的问题是我有依赖于服务 B 的服务 A,但是当我将服务 A 注入(inject)我的测试服务 B 时,服务 B 变得未定
我正在为我的项目使用 android 应用程序启动、刀柄和空间。我在尝试排队工作时遇到错误: com.test E/WM-WorkerFactory: Could not instantiate co
我不确定这是什么糖语法,但让我向您展示问题所在。 def factors num (1..num).select {|n| num % n == 0} end def mutual_factors
简单的问题,我已经看过这个了:Managing imports in Scalaz7 ,但我不知道如何最小化注入(inject) right和 left方法到我的对象中以构造 \/ 的实例. 我确实尝
在我的 Aurelia SPA 中,我有一些我想在不同模块中使用的功能。它依赖于调用时给出的参数和单例的参数。有没有办法创建一个导出函数,我可以将我的 Auth 单例注入(inject)其中,而不必在
我是一名优秀的程序员,十分优秀!