2017-02-16 16 views
7

Thuộc tính mô hình miền của chúng tôi đều là "Nội bộ" để bảo vệ cách tiếp cận BDD mà chúng tôi đã thực hiện. Tôi thực sự thích làm mọi thứ bên trong.Sử dụng các thuộc tính nội bộ trong RazorEngine

Gần đây tôi đang cố gắng để RazorEngine xử lý mẫu bằng cách sử dụng một trong các mô hình miền này với các thành viên nội bộ. Khi biên dịch, tôi gặp lỗi: .Attendee.FirstName' is inaccessible due to its protection level

Tôi đã thử thêm dòng này [assembly: InternalsVisibleTo("RazorEngine")] vào AssemblyInfo.cs của mô hình miền của tôi, nhưng dường như nó không giúp ích gì.

Làm cách nào để làm cho các thuộc tính nội bộ của tôi hiển thị với RazorEngine trong cùng một dự án.

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 File

@model VirtualAcademy.Domain.Attendee 

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

tôi không thực sự có được tại sao điều này là một câu hỏi - nếu nó là một mô hình được thiết kế để được tiêu thụ bởi các thư viện của bên thứ ba cần được công khai. – caesay

Trả lời

0

InternalsVisibleTo thuộc tính dự đoán tên của lắp ráp không phải là tên lớp hoặc namespace. Vì vậy, bạn cần phải thay đổi nó để làm theo.

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

RazorEngine là tên của hội đồng. Tôi rất quen thuộc với InternalsVisibleTo. Tôi nghĩ có một cái gì đó rất cụ thể về RazorEngine. –

3

Đáng tiếc là bạn không thể làm điều đó ...

@Model chỉ là một tài sản công cộng của WebViewPage < TModel> để InternalsVisibleTo làm cho không có sự khác biệt

Tôi đề nghị bạn tạo một ViewModel cho bạn lượt xem.
(Có lẽ với một mẫu T4 bạn có thể tạo các lớp học cho mô hình nội bộ của bạn)

Bây giờ, nếu bạn sẵn sàng để mất an toàn kiểu bạn có thể viết một phương pháp mở rộng và truy cập các giá trị sử dụng phản ánh

0

Có một chi tại Microsoft. Có thể có vấn đề với mạnh đặt tên hoặc StrongNameIdentityPermission lớp

Các vấn đề liên quan