我厌倦了一次又一次地写代码来缓存数据访问层中的对象.
无论如何都要缓存c#函数结果而不需要对函数进行太多更改.
目前是否有任何框架支持此功能?
我可以通过编写自定义"c#函数属性"来存档吗?如果是这样,请给我一些积分来开始实施?
我正在研究允许用户通过实现一组接口来扩展系统的软件.
为了测试我们正在做的事情的可行性,我的公司通过在用户完全相同的方式中实现这些类中的所有业务逻辑来" 吃掉自己的狗食 ".
我们有一些实用程序类/方法将所有内容绑定在一起并使用可扩展类中定义的逻辑.
我想缓存用户定义函数的结果.我应该在哪里这样做?
是班级本身吗?这似乎可能会导致很多代码重复.
它是使用这些类的实用程序/引擎吗?如果是这样,不知情的用户可以直接调用类函数,而不是获得任何缓存优势.
public interface ILetter { string[] GetAnimalsThatStartWithMe(); }
public class A : ILetter { public string[] GetAnimalsThatStartWithMe()
{
return new [] { "Aardvark", "Ant" };
}
}
public class B : ILetter { public string[] GetAnimalsThatStartWithMe()
{
return new [] { "Baboon", "Banshee" };
}
}
/* ...Left to user to define... */
public class Z : ILetter { public string[] GetAnimalsThatStartWithMe()
{
return new [] { "Zebra" };
}
}
public …Run Code Online (Sandbox Code Playgroud) 我有一个基本的存储库框架,最终执行查询并将结果映射回对象:
例如:
public SomeEntity Get(id)
{
return base.GetItem<SomeEntity>
("select * from SomeEntities where id = @idParam",
new { idParam = id});
}
Run Code Online (Sandbox Code Playgroud)
如果这看起来像Dapper,那是因为引擎盖GetItem正在包装Dapper.
我想为GetItem添加自动缓存,我有两个参数:
我担心对这些参数执行简单的主要哈希会导致缓存密钥冲突,当您从缓存中提取数据时,冲突可能非常非常糟糕(IE泄漏敏感信息).
那么,我有哪些技术可以生成合理大小的缓存键,同时保证基于查询和参数输入的唯一性?
我有一个像这样的方法:
public Something MyMethod()
{
Setup();
Do something useful...
TearDown();
return something;
}
Run Code Online (Sandbox Code Playgroud)
Setup和TearDown方法位于基类中.
我遇到的问题是我必须使用Setup()和TearDown()方法调用一遍又一遍地编写这种类型的方法.
编辑:这个方法的棘手部分是"做一些有用的东西......"仅适用于此方法.这个部分对我创建的每个方法都不同.
另外,我可以将MyMethod2,MyMethod3放在一个类中.在所有情况下,我想运行设置和拆解
有没有一种优雅的方式来做到这一点,而不必每次都写这个?
也许我是妄想,但是这是一种向方法添加属性并拦截方法调用的方法,所以我可以在调用之前和之后做一些事情?