**懒加载机制是懒汉式单例模式(基于Lazy<T>实现),**这是一种线程安全、高性能且写法简洁的单例实现方式
创建文件DataCacheManager,用作单例文件,里面创建其他实例。
public class DataCacheManager
{
private static readonly Lazy<DataCacheManager> _instance = new Lazy<DataCacheManager>(() => new DataCacheManager());
public static DataCacheManager Instance => _instance.Value;
//又可以写做
// public static DataCacheManager Instance
// {
// get { return _instance.Value; }
// }
// 属性类型现在是public,和属性可访问性一致
public A.AClass AData { get; private set; }
public B.BClass BData { get; private set; }
public C.CClass CData { get; private set; }
private DataCacheManager() { }
public async Task<bool> LoadAllDataAsync()
{
try
{
await Task.Run(() =>
{
// 逐个加载并校验,定位哪个类加载失败
try
{
//创建实例1
A.Data = new A.AClass();
AData.AMethod();
}
catch (Exception ex)
{
throw new Exception("加载AData失败:" + ex.Message);
}
try
{
//创建实例2
BData = new B.BClass();
BData.BMethod();
}
catch (Exception ex)
{
throw new Exception("加载BData失败:" + ex.Message);
}
try
{
//创建实例3
CData = new C.CClass();
CData.CMethod();
}
catch (Exception ex)
{
throw new Exception("加载CData失败:" + ex.Message);
}
});
return true;
}
catch (Exception ex)
{
// 显示详细的加载失败原因,方便定位
MessageBox.Show($"数据加载失败:{ex.Message}\n{ex.StackTrace}", "加载错误");
// 清空缓存,避免后续使用脏数据
AData = null;
BData = null;
CData = null;
return false;
}
}
Lazy<T>是.NET 提供的懒加载类,它的特点是不会在程序启动或类加载时创建实例,而是在第一次访问Value属性时才创建实例(即 "懒加载",延迟初始化)。
_instance.Value的逻辑:
- 第一次访问
Instance时,_instance.Value会执行初始化委托(() => new DataCacheManager()),创建唯一的DataCacheManager实例。 - 后续所有访问
Instance的操作,都会直接返回第一次创建的那个实例,不会再新建(保证实例唯一性)。
() => new DataCacheManager(): 这是一个匿名委托(Lambda 表达式) ,它定义了Lazy<T>创建DataCacheManager实例的逻辑 ------ 调用DataCacheManager的私有构造函数(private DataCacheManager())创建实例。
当执行_instance.Value(return _instance.Value;)即Lazy<T>.Value,就会执行语句:new Lazy<DataCacheManager>(() => new DataCacheManager());
此时触发实例创建(首次访问时),返回T的实例(后续访问返回缓存的实例)
Lambda 表达式:() => new DataCacheManager()(调用DataCacheManager的私有构造函数,创建实例)。
调用该单例的函数:
public void Calculate()
{
// 仅获取缓存实例
var cache = DataCacheManager.Instance;
///
///业务逻辑
///
}
