/*
Kooboo is a content management system based on ASP.NET MVC framework. Copyright 2009 Yardi Technology Limited.
This program is free software: you can redistribute it and/or modify it under the terms of the
GNU General Public License version 3 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program.
If not, see http://www.kooboo.com/gpl3/.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CSScriptLibrary;
using Everest.Library.Providers.Caching;
using System.Reflection;
using Everest.CmsServices.Models;
using Everest.Library.ExtensionMethod;
namespace Everest.CmsServices.Services{
public class DynamicScriptExecutor
{
/// <summary>
/// Executes the specified script.
/// </summary>
/// <param name="script">The script.</param>
/// <param name="methodName">Name of the method.</param>
/// <param name="paramsList">The params list.</param>
public static object Execute(string script, string methodName, params object[] paramsList)
{
var asmHelper = GetAsmHelper(script);
return asmHelper.Invoke(methodName, paramsList);
}
/// <summary>
/// Gets the asm helper.
/// </summary>
/// <param name="script">The script.</param>
/// <returns></returns>
private static AsmHelper GetAsmHelper(string script)
{
if (StringExtensions.IsNullOrEmptyTrim(script))
{
throw new Exception(Resources.ScriptIsEmpty);
}
else
{
string cacheKey = string.Format("__DynamicScript:{0}", script);
AsmHelper asmHelper = CacheManager.Get(CachedData.Schema, cacheKey) as AsmHelper;
if (asmHelper == null)
{
Assembly assembly = CSScript.LoadCode(script);
asmHelper = new AsmHelper(assembly);
CacheManager.Add(CachedData.Schema, cacheKey, asmHelper, CacheItemPriority.Normal, null, CachedData.DefaultExpirations);
}
return asmHelper;
}
}
}
}
|