2017-02-16 74 views
7

我們的域模型屬性都是「內部」的,以保護我們所採用的BDD方法。我真的很喜歡把所有東西都放在內部在RazorEngine中使用內部屬性

最近我試圖讓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> 
+0

我真的不明白爲什麼這是一個問題 - 如果它是被設計爲通過第三方庫消耗應該是公共的典範。 – caesay

回答

0

InternalsVisibleTo屬性預計大會不要在類名或命名空間的名稱。所以你需要把它改成跟隨。

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

RazorEngine是程序集的名稱。我對InternalsVisibleTo非常熟悉。我認爲RazorEngine有一些非常具體的內容。 –

3

可惜你不能做到這一點...

@Model是WebViewPage <的TModel>所以InternalsVisibleTo沒什麼區別

的只是一個公共財產,我建議你創建一個視圖模型您視圖。
(也許有T4模板,你可以爲您的內部模型類)

現在,如果你願意失去類型安全,你可以使用反射

0

有一個讀寫的擴展方法並訪問值在Microsoft。有可能是與強命名StrongNameIdentityPermission類問題