Razor エンジンを使用しています: https://github.com/Antaris/RazorEngine。
モデルを動的に作成しています。テンプレートに拡張メソッドを含めようとしていますが、拡張クラスを認識する必要があります。「 'string' には 'ToUpperFirstLetter' の定義が含まれていません」というエラー メッセージが表示されます。
モデル作成
dynamic model = new ExpandoObject();
((IDictionary<string, object>)model).Add("Forename", "john");
テンプレート
@using Namespace.Extensions
@{
ViewBag.Title = "Title";
}
Hello @Model.Forename.ToUpperFirstLetter()
拡張クラス
namespace Namespace.Extensions
{
public static class StringExtensions
{
public static string ToUpperFirstLetter(this string source)
{
return ....removed for abbreviation
}
}
}
かみそりの解析
ITemplate template = Razor.Resolve(template, model);
string result = template.Run(new ExecuteContext());
編集
また、Dynamic ExpandoObject で拡張メソッドを作成したいと考えていました。モデル内に値が存在するかどうかを確認します。「 System.Dynamic.ExpandoObject' には 'HasValue' の定義が含まれていません」というエラー メッセージが表示されます。
拡張クラス
public static class ExpandoObjectExtensions
{
public static bool HasValue(this ExpandoObject source, string key)
{
return ((IDictionary<String, object>)source).ContainsKey(key);
}
}
延長利用
@if(Model.HasValue("Hello"))
{
@Model.Hello
}
編集 2
以下は機能し、拡張メソッドに入ります
var o = new object();
var bool = o.HasValue("value");
動的モデルは依然として例外をスローします - RuntimeBinderException: 'System.Dynamic.ExpandoObject' には 'HasValue' の定義が含まれていません
dynamic model = new ExpandoObject();
var bool = model.HasValue("value");