using System;
using System.IO;
using System.Windows.Forms;
using Spark;
using Spark.FileSystem;
namespace SparkViewEngineTest {
static class Program {
[STAThread]
static void Main() {
FileInfo fi = new FileInfo("MyTemplate.spark");
using (SparkViewEngineHelper<MyTemplate> helper = new SparkViewEngineHelper<MyTemplate>(fi.Name)) {
helper.View.MyText = "Blah";
MessageBox.Show(helper.ToString());
}
using (SparkViewEngineHelper<MyTemplate> helper = new SparkViewEngineHelper<MyTemplate>(fi.FullName)) {
helper.View.MyText = "Blah2";
MessageBox.Show(helper.ToString());
}
}
}
public abstract class MyTemplate : AbstractSparkView {
public string MyText { get; set; }
}
public class SparkViewEngineHelper<T> : IDisposable
where T : AbstractSparkView {
private SparkViewEngine engine;
public T View { get; private set; }
public SparkViewEngineHelper(string templateFile) {
this.View = this.CreateView(templateFile);
}
public void ToFile(string file) {
File.WriteAllText(file, this.ToString());
}
public override string ToString() {
StringWriter sw = new StringWriter();
this.View.RenderView(sw);
return sw.ToString();
}
private T CreateView(string templateFile) {
FileInfo fi = new FileInfo(templateFile);
if (!fi.Exists) {
throw new FileNotFoundException(templateFile);
}
this.engine = new SparkViewEngine();
this.engine.ViewFolder = new FileSystemViewFolder(fi.DirectoryName);
this.engine.Settings.PageBaseType = typeof(T).FullName;
SparkViewDescriptor descriptor = new SparkViewDescriptor().AddTemplate(fi.Name);
return (T)engine.CreateInstance(descriptor);
}
void IDisposable.Dispose() {
if (this.engine != null && this.View != null) {
this.engine.ReleaseInstance(this.View);
}
}
}
}