如何从堆栈帧中获取泛型参数的类型?

2024-01-17

我们应该通过工厂实例化我们的实体,因为它们在客户端和服务器上的设置不同。我想确保情况确实如此,但无法完全使其发挥作用。

public interface IEntityFactory
{
    TEntity Create<TEntity>() where TEntity : new();
}

public abstract class Entity
{
    protected Entity()
    {
        VerifyEntityIsCreatedThroughFactory();
    }

    [Conditional("DEBUG")]
    private void VerifyEntityIsCreatedThroughFactory()
    {
        foreach (var methodBase in new StackTrace().GetFrames().Select(x => x.GetMethod()))
        {
            if (!typeof(IEntityFactory).IsAssignableFrom(methodBase.DeclaringType)
                || methodBase.Name != "Create")
                continue;

            // The generic type is TEnitiy but I want the provided type!
            if (methodBase.GetGenericArguments()[0] != GetType())
                Debug.Fail(string.Format("Use factory when creating {0}.", GetType().Name));
        }
    }
}

是否可以从结构上解决这个问题而不是在运行时解决这个问题?您可以将实体和工厂分离在不同的程序集中,然后提供实体构造函数吗internal确定范围以便只有工厂才能调用它们?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从堆栈帧中获取泛型参数的类型? 的相关文章

  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • 如何取消合并单元格 EPPlus?

    我正在尝试根据表列的数量取消合并并重新合并更短或更长的范围 我使用了下面的代码 但它似乎不起作用 tableSheet Cells C1 J1 Merge false 任何帮助将不胜感激 您运行的是 EPP 4 0 1 吗 如果是这样 则这
  • 一个属性可以访问另一个属性吗?

    我刚刚接触Python 这是一个关于类的逻辑和实现的非常普遍的问题 我对这个问题的基本水平表示歉意 但希望它对其他人也有用 这里有一些上下文可以使它更清楚 Context 我想创建一个代表图像的类 该图像包括 3 个波段 R G B 与 3
  • 从udf访问hdfs文件

    我想通过 udf 调用访问文件 这是我的脚本 files LOAD docs in USING PigStorage AS id stopwords id2 file buzz FOREACH files GENERATE pigbuzz
  • 依赖下拉框 CakePHP 3

    我创建了一个国家 城市和客户表 我试图确保当我从下拉列表中添加新客户时 我可以选择一个国家 然后选择与该国家 地区相关的城市 目前我无法从下拉列表中选择任何城市和国家 地区组合 这是我的数据库 CREATE TABLE IF NOT EXI
  • MySql 全天候查询结果

    我需要获取一天中所有时间的数据 即使计数为 0 现在它输出 clicks hour 1 7 2 13 我现在的查询 SELECT count as clicks hour time as hour FROM clicks WHERE DAT
  • DOM 中相邻的文本节点可以用 Javascript 合并吗?

    假设我在网页 DOM 中有一个句子 当我检查它时 它由 3 个文本节点组成 后跟一些元素 例如粗体或斜体 我想将文本节点合并为一个文本节点 因为相邻的文本节点是没有意义的 没有理由拥有它们 有没有办法轻松合并它们 谢谢 看起来Node no
  • JPA OneToOne 关联,其中 2 个实体使用复合主键但使用不同的列名称?

    我们正在尝试将 Hibernate 与数据库一起使用 该数据库使用lot复合键的使用一直让我们很头疼 不幸的是 我们无法更改架构 因此我们必须在字段之间进行大量额外的映射 我们仅限于使用 JPA 1 0 和 Hibernate 3 3 最大
  • WooCommerce 中特定单个产品页面的附加自定义按钮

    在 WooCommerce 中 需要创建另一个按钮 该按钮重定向到特定产品页面当前 添加到购物车 按钮下方的 联系我们 表单 例如 http offers elements com sg product ha power dose faci
  • 具有“加权”边缘的 Ford-Fulkerson 算法

    福特 福尔克森是否有任何变体可以在边缘增加额外的 重量 尺寸 我的意思是 某些边缘比其他边缘更理想 尽管存在所有可能性 但它会优先考虑理想边缘而不是不太理想的边缘 据我所知 增加权重有两种常见的概括 最小成本流 假设您对每条边都有一个权重
  • 将 $or 与 $elemMatch 和数组外部的条件一起使用

    我的基本结构是我有一个 User 对象和一个包含 subjectId 和每小时价格的会话对象 User defaultHourly Number subjects id String hourly Number 我这样使用 elemMatc
  • 如何在 JavaScript 中计算负整数的模?

    我试图通过递增或递减 1 来迭代 jQuery 对象数组 因此 对于递减部分 我使用以下代码 var splitted id currentDiv attr id split var indexOfDivToGo parseInt spli
  • Vagrant 与 apache 同步文件夹权限问题

    我正在运行 Centos6 4 机器 Running vagrant upVagrant 文件中没有同步文件夹配置就可以了 我可以通过以下方式访问我的主机http localhost 8080它显示 Apache 页面 我可以在中创建ind
  • 比较rapidjson::文档

    我有两个 RapidJSON 文档 一个是我在运行时创建的 另一个是从磁盘读取的 我想比较这两个文件是否相似 比较 RapidJSON 文档的最佳方法是什么 我的 JSON 看起来像这样 SimpleCompany Manager read
  • 如何使用 PHP 读取串口 [重复]

    这个问题在这里已经有答案了 如何使用 php 从连接到我的服务器 运行 kali linux 的旧笔记本电脑 上的 COM 端口的 arduino 读取串行数据 以便我可以在网页上显示数据 我读过有关同一问题的其他问题 所有这些问题要么超级
  • 虚幻引擎 4 中的 C++ 嵌套 JSON

    我有一个从服务器获取的 JSON 对象 如下所示 state 1 player1 alias Player Name ready 0 我能够获取 JSON 将其解析为 FJsonObject 并使用以下代码检索 JSON 对象第一级中的任何
  • 使用多个 Getter 时用 Try-Catch 代替 Null 检查

    我的问题如下 我有一个很长的 Getter 即 objectA getObjectB getObjectC getObjectD getObjectE getName 由于 糟糕的 数据库 实体设计 有些东西比其他东西晚于其他东西引入 它发
  • 获取所选项目的详细信息

    我正在使用sap m ObjectListItem作为我已从 API 绑定 JSON 数据的列表项 但是 当我按下某个项目时 我找不到从列表中获取所选项目的方法 甚至获得该物品的钥匙也会有帮助
  • 用 unicode 分隔符分割字符串? [复制]

    这个问题在这里已经有答案了 给定字符串 str Led Zeppelin Blackdog 我该如何分割它 最终得到 Led Zeppelin Blackdog but 不是连字符 它被编码为u u2014 我该怎么做 如果您希望清楚地表明
  • 组合词频数据列表

    这似乎应该是一个显而易见的问题 但列表上的教程和文档尚未发布 其中许多问题源于我的文本文件的巨大大小 数百 MB 以及我试图将它们归结为我的系统可以管理的内容 因此 我正在分段进行工作 现在正在尝试合并结果 我有多个词频列表 大约 40 个
  • 如何从堆栈帧中获取泛型参数的类型?

    我们应该通过工厂实例化我们的实体 因为它们在客户端和服务器上的设置不同 我想确保情况确实如此 但无法完全使其发挥作用 public interface IEntityFactory TEntity Create