自定义ICache实现的关键问题

时间:2011-03-16 13:49:49

标签: nhibernate

我们有自己的缓存框架,运行良好,我们喜欢它。我们想把它连接到NHibernate而不是依赖于NH的其他缓存实现之一。

我编写了NHibernate.Cache.ICache的实现,它将我们的框架与NH连接起来。我的实现几乎完全基于此:

https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Caches/Velocity/NHibernate.Caches.Velocity/VelocityClient.cs

直接跳出来的一件事就是ICache界面中的缓存键属于object类型。我们的框架密钥是使用字符串的缓存。我注意到上面的Velocity实现只是在传递给Get(对象键)和Put(对象键)方法的键实例上执行.ToString()。这让我有些紧张。

在我的测试中,似乎“key”对象的类型为string,它是实体名称。

我的问题:

  • 在密钥实例上盲目地调用.ToString()一个安全的方法(我正在检查null)?
  • 如果这个实现确实安全,那是否意味着它总是一个字符串?
  • 如果这总是一个字符串,那么为什么这是对象类型?

NH家伙比我聪明,所以它是类型对象的事实让我觉得我在这里缺少一些东西。我真的不想在我的缓存实现中引入一些模糊的,随机的会话管理错误以及不安全的密钥用法。

任何指导都将受到赞赏 - 干杯

1 个答案:

答案 0 :(得分:1)

我在这里没有得到任何回复,也没有得到NH用户组线程[1]。我已经得出结论,在我们的自定义实现中调用key.ToString()是安全的,但我很难过,我没有得到关于此的官方指导:(

有关详细信息,请参阅用户组线程。

干杯

[1] http://groups.google.com/group/nhusers/browse_thread/thread/6d47ab21e85eb9b7/988ad6046528e7bc?lnk=gst&q=Custom+Cache#988ad6046528e7bc