我正在使用 .Net core Web 应用程序。在我的应用程序中,我使用它Lazy来将大量耗时的操作缓存到 Lazy 值中:interface IFoo{ Lazy<Task<int>> MyLazy { get; set; }}class Foo : IFoo{ public Lazy<Task<int>> MyLazy { get; set; } public Foo() { MyLazy = new Lazy<Task<int>>(() => /*heavy operation*/ Task.FromResult(3)); }}当然,我不想在构造函数中运行繁重的操作,但仅在需要时才运行,然后缓存该值。恕我直言,懒惰的财产很好。值得一提的是:我确实计划使用.AdddSingleton<Ifoo,Foo>.所以现在我可以注入IFoo并获得MyLazy财产。但我不想set公开。我尝试将其更改为protected set但出现错误:问题:我想我在这里走错路了。如何创建 DI 接口类来公开重载操作的缓存属性?(不允许更改,外部Foo)完整的关闭:我们需要从数据库加载一些要在整个应用程序中使用的行,并且不想每次都加载它们。
1 回答
GCT1015
TA贡献1827条经验 获得超4个赞
您可以在 中仅声明getter IFoo,如下所示:
public interface IFoo
{
Lazy<Task<int>> MyLazy { get; }
}
然后,从 C# 6 开始,您可以实现一个只读自动属性,它将实现接口成员并提供可在构造函数中使用的 setter:
public class Foo : IFoo
{
public Lazy<Task<int>> MyLazy { get; }
public Foo()
{
MyLazy = new Lazy<Task<int>>(() => Task.FromResult(3));
}
}
或者,如果您想在类中的其他位置设置它,您可以更改Foo.MyLazy为:private set
public class Foo : IFoo
{
public Lazy<Task<int>> MyLazy { get; private set; }
// ...
}
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消