在 RazorEngine 中使用内部属性

2024-01-10

我们的领域模型属性都是“内部”的,以保护我们所采用的 BDD 方法。我真的很喜欢把一切都内部化。

最近,我试图让 RazorEngine 使用这些具有内部成员的域模型之一来处理模板。当它编译时,我收到错误:.Attendee.FirstName' is inaccessible due to its protection level

我尝试添加这一行[assembly: InternalsVisibleTo("RazorEngine")]到我的域模型的 AssemblyInfo.cs,但它似乎没有帮助。

如何使我的内部属性对同一项目中的 RazorEngine 可见。

Code

public class Attendee : AggregateRoot {
    protected internal virtual new long Id { get; protected set; }
    protected internal virtual Event Event { get; protected set; }
    protected internal virtual bool? Online { get; protected set; }
    protected internal virtual string FirstName { get; protected set; }
    protected internal virtual string LastName { get; protected set; }
    protected internal virtual string Email { get; protected set; }
    protected internal virtual string Affiliation { get; protected set; }
    protected internal virtual string MeetingPassword { get; protected set; }
    protected internal virtual decimal AmountPaid { get; protected set; }
    protected internal virtual DateTime DateRegistered { get; protected set; } 

    public virtual void SendEmail() {

                var assembly = Assembly.GetExecutingAssembly();
                var stream = assembly.GetManifestResourceStream("VirtualAcademy.Domain.Email.RegistrationConfirmation.cshtml");
                var reader = new StreamReader(stream);
                var template = reader.ReadToEnd();                 
                Engine.Razor.RunCompile(template, "key", null, this);
     }

CSHTML 文件

@model VirtualAcademy.Domain.Attendee

<html>
<body style="font: 12px arial, sans-serif">
    <div>
        <span id="SalutationLabel">Hello @Model.FirstName @Model.LastName,</span>

不幸的是你不能这样做......

@Model 只是 WebViewPage 的公共属性,因此 InternalsVisibleTo 没有区别

我建议您为您的视图创建一个 ViewModel。
(也许使用 T4 模板,您可以为内部模型生成类)

现在,如果您愿意失去类型安全性,您可以编写扩展方法并使用反射访问值

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

在 RazorEngine 中使用内部属性 的相关文章

  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • 你好,我最近正在开发我的新游戏,我遇到了*无限跳跃*的问题

    所以基本上当我按跳跃 空格键时我会跳跃但是如果我连续按空格键它 只是跳啊跳啊跳等等 我不想要我只想它跳一次 code if Input GetKeyDown space isGrounded velocity y Mathf Sqrt ju
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad

随机推荐

  • “在没有模板参数的情况下使用”

    我意识到以前也有人问过类似的问题 但我读了其中的几个 但仍然不明白我哪里错了 当我简单地编写我的类而不将原型与定义分开时 一切正常 当我将原型和定义分开时 就会出现问题 如下所示 template
  • GroupedItemsPage:从详细信息页面导航回来时视图跳回到开始位置

    我为一家报纸开发了一个非常受欢迎的新闻应用程序 不幸的是 我的用户报告了我可以重现的以下问题 该应用程序基本上由分组项目页 and a 项目详情页 以及其他几个页面 这里并不重要 GroupedItemsPage 显示按类别分组的新闻 当用
  • 使用 FastRWeb 捕获 HTTP POST 内容?

    有谁知道如何使用 FastRWeb 捕获 POST 变量 或 HTTP 请求的其他部分 FastRWeb 是一个使您能够在 cgi 环境中运行 r 脚本的工具 这是一个使用 FastRWeb 的示例程序 run lt function n
  • androidx renderscript 崩溃“加载 RS jni 库时出错:java.lang.UnsatisfiedLinkError:从 JNI_OnLoad 返回的 JNI_ERR”

    我在用着Android DS 照片编辑器 SDK https github com DS Photo Editor SDKv1 5 ds photo editor sdk v6 aar 和 androidx 在我的项目中 打开编辑器过滤器时
  • 如何改善 CRM 2011 On Prem 开发环境中的删除超时问题?

    背景 我有一个单元测试框架 它为我的单元测试创 建实体 执行测试 然后自动删除实体 它一直工作正常 只是在我们的开发环境中删除某些实体需要 15 30 秒 我最近在 Amazon 云中收到了一个虚拟机设置 用于执行一些需要几个发布周期才能完
  • org.json.JSONArray 无法转换为 JSONObject

    我是新来的JSON我收到以下异常 org json JSONArray cannot be converted to JSONObject在 try 部分本身的第一行 请帮我删除这个 这是我的代码 try JSONObject json n
  • 输入默认图像以防 html 的 src 属性无效?

    有没有办法在 HTML 中呈现默认图像 img 标签 以防万一src属性无效 仅使用 HTML 如果没有 您解决这个问题的轻量级方法是什么 你要求一个仅 HTML解决方案 p p
  • 引导弹出窗口未显示在所有元素的顶部

    我正在开发一个 bootstrap 网站 从 2 0 更新到 bootstrap 2 2 后 除了弹出窗口之外 一切正常 弹出窗口仍然显示良好 但它们不会显示在所有其他元素之上 div this sits on top of the pop
  • 在 GraphQL 中处理 Mongoose 填充的字段

    我如何表示一个可以是简单字段ObjectId字符串还是填充的对象实体 我有一个代表 设备类型 的 Mongoose 架构 如下所示 assetSchema js import as mongoose from mongoose const
  • 创建 png 文件

    我做了一个函数来处理 jpg 和 png 文件 但是在尝试上传 png 文件时出现错误 这是函数 function createImg type src dst width height quality newImage imagecrea
  • C 和 C++ 之间的内存布局兼容性

    我正在建造一个C 使用许多函数的库struct定义在一个C图书馆 为了避免将任何代码移植到 C 我将典型的条件预处理添加到 C 头文件中 例如 my struct h of the C library include
  • Azure 容器注册表保留策略

    我有一个 ACR 它包含适用于我的生产和开发环境的 docker 映像 由于每天都有新的图像被推送 我正在尝试设置保留策略 我的具体用例如下 根据该图像 假设我在 ACR 中有 100 个图像 第 100 个图像由开发环境消耗 然而 生产运
  • C++ 访问向量

    I have std vector其中包含我自己的类 我必须访问它的函数和空隙 class A private int var vector
  • 在 Electron 渲染器进程中读取 Windows 命令行选项

    我在 Windows 中部署了一个 Electron 应用程序 我正在尝试在 exe 上添加命令行选项 C Program Files MyApp exe 调试 如何读取我的应用程序内的调试标志 我尝试使用 process argv 但调试
  • 有没有办法更改领域数据库中的数据类型?

    正如您所看到的图像 我完全搞乱了数据类型 红色圆圈 有没有办法将数据类型更改为整数 EDIT 我想将数据类型从 String 更改为 Int 并且我有现有数据 因此我无法从新领域开始而只更改 var 类型 class Item Object
  • Q_DECLARE_METATYPE 是 boost::multi_array

    我正在尝试使用 Qt 的信号和槽机制传递表示为 boost multi array 的多维数组 我尝试使用以下代码声明元类型 Q DECLARE METATYPE boost multi array
  • MVC 4 SIMpleMembership 与 LDAP

    我想尝试使用 simpleMembership 但将其连接到我们的 LDAP 我在网上没有看到任何关于这样做的内容 只使用 SQL 有谁知道这是否可能并能引导我走向正确的方向 我认为您需要创建一个继承自 ExtendedMembership
  • 结构 - 访问结构元素,不带 .和->

    我需要访问嵌套结构中的一些元素而不使用 and gt 我需要打印出以下值keyValue and alternateKeyValue从测试笔记本电脑定义中不使用 or gt 运算符直接引用 qwerty 结构或其成员 这是结构 typede
  • 如果在接口中声明方法时将注释与方法相关联,我们是否可以强制实现类中存在注释?

    这是关于 Java 中注释的使用 我在接口中声明方法时将注释与方法相关联 在实现时 如何确保该注释与 Override注释一起携带 如果没有 它应该抛出编译错误 Thanks 您不能在编译器中强制执行此操作 不 当在给定类上查找注释时 工具
  • 在 RazorEngine 中使用内部属性

    我们的领域模型属性都是 内部 的 以保护我们所采用的 BDD 方法 我真的很喜欢把一切都内部化 最近 我试图让 RazorEngine 使用这些具有内部成员的域模型之一来处理模板 当它编译时 我收到错误 Attendee FirstName