私はここCodePlex Discussionからの私の応答を投稿します。コードブロック(@ {})を使用すると、実際にメソッド内にコードを記述しています。上記のコードは次のようになります:
public void Execute()
{
this.Clear();
public class MyClass {
public MyClass() {
Three = new List<string>();
}
public string One { get; set; }
public int Two { get; set; }
public List<string> Three { get; set;}
}
}
...もちろん、有効ではありません。あなたが直面するもう一つの問題は、xmlの直列化/直列化を使用することです。タイプは既知でなければなりませんが、テンプレート自体の中でタイプを定義している場合、どのようにして最初にそれを逆シリアル化できますか?動的プロパティと動的な戻り値の型を使用して
public class CustomTemplateBase<T> : TemplateBase<T>
{
public dynamic Instance { get; set; }
public dynamic CreateInstance(string typeName)
{
Type type = Type.GetType(typeName);
// You'd to your deserialisation here, I'm going to
// just cheat and return a new instance.
return Activator.CreateInstance(type);
}
}
、私たちは私たちが活性化を通して(インスタンスを作成できるようになる方法を定義した:あなたは、カスタムベースのテンプレートを使用している何ができるか
またはデシリアライゼーションなど)を呼び出し、そのメンバーにアクセスします。これをテンプレートで使用するには、次のようにします。
@{
Instance = CreateInstance("ConsoleApplication1.MyClass, ConsoleApplication1");
Instance.One = "Hello World";
}
<h1>@Instance.One</h1>
ここで、 "MyClass"は自分のアプリケーションのどこかで定義されています。重要なことは、テンプレートごとにインスタンスを作成していることです。
:
@functions
キーワードを使用しますか? – reneあなたは 'MyClass'を別のファイルに持ち出せませんか?これでテンプレートごとに2つのファイルが作成されますが、それはうまくいきます。 –
「アンサー」のチェックを外して、「カークウォール」の答えを正しい答えとしてチェックすることはできますか? –