在RazorEngine中使用内部属性

我们的领域模型属性都是“内部的”,以保护我们所采用的BDD方法。 我真的很喜欢把所有东西都放在内部

最近我试图让RazorEngine使用其中一个域模型与内部成员来处理模板。 编译时,出现错误: .Attendee.FirstName' is inaccessible due to its protection level

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

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

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 <TModel>的一个公共属性,所以InternalsVisibleTo没有任何区别

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

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


InternalsVisibleTo属性期望程序集的名称而不是类名或命名空间。 所以你需要把它改成跟随。

[InternalsVisibleTo("System.Web.Mvc")]

在微软阅读。 强命名StrongNameIdentityPermission类可能存在问题

链接地址: http://www.djcxy.com/p/38637.html

上一篇: Using Internal Properties in RazorEngine

下一篇: Ionic 2 build dev failed: Maximum call stack size exceeded