私はDot Liquidを使用しようとしています。これは、C#の最もクールなテンプレートエンジンの1つです。 ドット・リキッドは、テンプレートを安全に使用するための方法を使用しています。ここでHere is the explanation page.ILiquidizableを実装するDataRowクラスを作成する
それから説明がwikiのです:Renderメソッドへ をパラメータとして
DotLiquid、デフォルトでは、唯一のタイプの 限られた数を受け入れる - .NETプリミティブ型(を含みますfloat、 文字列など)、およびいくつかのコレクション (IDictionary、IListおよび IIndexable(カスタムDotLiquid インターフェイス)を含むタイプです。
それは、任意の種類をサポートしている場合、 それはプロパティまたは意図せずに、テンプレートの作者に を暴露され 方法につながる可能性があります。これを防ぐために、 DotLiquidはDropオブジェクトを使用します。オブジェクト を公開するオプトインアプローチを使用して、 を使用してください。
:public class User { public string Name { get; set; } public string Email { get; set; } } public class UserDrop : Drop { private readonly User _user; public string Name { get { return _user.Name; } } public UserDrop(User user) { _user = user; } } Template template = Template.Parse("Name: {{ user.name }}; Email: {{ user.email }};"); string result = template.Render(Hash.FromAnonymousObject(new { user = new UserDrop(new User { Name = "Tim", Email = "[email protected]" }) }));
ドロップクラスには、ちょうど1 ILiquidizableの実装、および 実装である にDotLiquidテンプレートに直接
ウィキサンプルコードILiquidizableをご オブジェクトを公開する最も簡単な方法です
DataRowを液体に渡すと、液体が表示されなくなります。
は「System.Data.DataRow」は無効です ことがあるので、どちらのタイプ ビルトインも
ILiquidizableをあまりにも実装するDataRowオブジェクトを渡すために任意のソリューションがありますILiquidizable実装しますか? ありがとう
おそらく 'DataRow'を' ILiquidizable'を実装しているあなた自身のクラスインスタンスに変換する必要があります。私はあなたが 'DataRow'のような既存のクラスを突然新しいインターフェースをサポートする方法を見ていません.... –