I am using KingAOP for caching purpose. so I am creating a CustomAttribue class and override the OnEntry and OnSucess method.
I am sharing codes we have used in our application. Can you please suggest me how can invoke these methods.
public CacheAttribute(WOSDbTable dependentTableName, params WOSDbTable[] dependentTableNames)
{
this.dependentTableNames = new List<WOSDbTable>();
this.dependentTableNames.Add(dependentTableName);
this.dependentTableNames.AddRange(dependentTableNames.Select(tableName => tableName));
}
public override void OnEntry(MethodExecutionArgs args)
{
object readValue;
wosDataCache.TryGetValue(cacheKey, out readValue);
if (readValue != null)
{
args.ReturnValue = readValue;
args.FlowBehavior = FlowBehavior.Return;
}
}
public override void OnSuccess(MethodExecutionArgs args)
{
if (new DBConnectionCore().RegisterSqlDependency(SqlDependencyChanged, dependentTableNames).Result)
{
wosDataCache.TryAdd(cacheKey, args.ReturnValue);
}
}
public class StaticDataContext : IStaticDataContext, IDynamicMetaObjectProvider where T : IStaticDataModel
{
[Cache(WOSDbTable.LanguageMaster, WOSDbTable.TranslationKeyMaster, WOSDbTable.TranslationMaster)]
public async Task<List> GetStaticDataAsync()
{
DBConnectionCore dbConnectionCore = new DBConnectionCore();
using (IDataReader dataReader = await dbConnectionCore.ExecuteReaderAsync(WOSDbStoredProc.USP_GetStaticData).ConfigureAwait(false))
{
return await dataReader.ToFlatModelAsync().ConfigureAwait(false);
}
}
public DynamicMetaObject GetMetaObject(Expression parameter)
{
return new AspectWeaver(parameter, this);
}
}