2

我有一个简单的接口来缓存这样的东西

public interface ICacheService
{

        T Get<T>(string cacheId, Func<T> getItemCallback) where T : class;
}

这适用于简单的回调函数,但在我的情况下,我需要添加一些更复杂的东西。我认为这是一种匿名类型...

在控制器中,我正在注入一个运行查询的服务,如下所示:

this.queryContainer.Get<ObjectQuery>().Execute(new ObjectParameters(id));

但当然这不是 Func 类型,所以如果我尝试使用我的缓存服务,编译器会抱怨。

我需要什么样的接口才能让我的缓存工作?理想情况下,我想这样做:

this.cachingService.Get<ObjectResult>(id, this.queryContainer.Get<ObjectQuery>().Execute(new ObjectParameters(id)));

甚至可能吗?

任何帮助是极大的赞赏!

非常感谢

4

2 回答 2

2

您只需要将其表示为Func<T>? 试试这个:

this.cachingService.Get<ObjectResult>(id, ()=> this.queryContainer.Get<ObjectQuery>().Execute(new ObjectParameters(id)));
于 2012-07-25T17:18:54.453 回答
1

您可以使用 lambda 函数。

() => this.queryContainer...

它将您的代码包装在一个没有参数的函数中,返回一个值。因此它履行了 Func 的合同

于 2012-07-25T17:20:56.623 回答