代码如下:
protected static VelocityEngine vltEngine = null; private static object objLock = new object(); private IContext context = new VelocityContext(); public bool IsFile = true; /// <summary> /// 是否重模板中生成 /// </summary> /// <param name="isFile"></param> public void Init(string loadPath, bool isFile) { lock (objLock) { if (vltEngine == null) { vltEngine = new VelocityEngine(); vltEngine.SetProperty(RuntimeConstants.INPUT_ENCODING, "gb2312"); vltEngine.SetProperty(RuntimeConstants.OUTPUT_ENCODING, "utf-8"); vltEngine.SetProperty("directive.set.null.allowed", true); //可以为空 vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, true); //开启缓存 vltEngine.SetProperty("file.resource.loader.modificationCheckInterval", (Int64)600); vltEngine.SetProperty("resource.manager.class", "NVelocity.Runtime.Resource.ResourceManagerImpl"); vltEngine.SetProperty("resource.manager.cache.class", "NVelocity.Runtime.Resource.ResourceCacheImpl"); IsFile = isFile; if (IsFile) { //初始化该实例对象 vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file"); //加载类型 if (!string.IsNullOrEmpty(loadPath)) vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, loadPath);//设置路径 } vltEngine.Init(); } else { IsFile = isFile; if (IsFile) { //初始化该实例对象 //也可以在这里指定绝对路径。当指定相对路径时, 在不同的环境下是有区别的。 if (vltEngine.GetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH).ToString() != loadPath) { vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file"); //加载类型 if (!string.IsNullOrEmpty(loadPath)) vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, loadPath);//设置路径 vltEngine.Init(); } } } } }
是静态VelocityEngine 调用时根据栏目设置模板路径跟换模板。
发现重新设置路径,并重新初始化后不管用。我用的dll NVelocity.dll 版本 1.1.1.60
vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, loadPath);//设置路径
vltEngine.Init();
请各问大侠告诉在下怎样动态更换路径呢,除了每次都初始化这个方法。