通过泛型类传参的方式实现如下:
/// <summary> /// 用于从另一个类创建或获取单例的静态助手。 /// </summary> /// <typeparam>要创建或获取单例的类型。</typeparam> public static class SingletonProvider<T> where T : class, new() { #region Fields /// <summary> /// 获取给定类型的单例。 /// </summary> private static readonly Lazy<T> _lazy = new Lazy<T>(() => new T()); #endregion #region Properties /// <summary> /// 获取给定类型的单例。 /// </summary> public static T Instance => _lazy.Value; #endregion }除了泛型类传参,还可以通过Get方法传参,实现如下:
/// <summary> /// 用于从另一个类创建或获取单例的静态助手。 /// </summary> public static class SingletonProvider { #region Methods /// <summary> /// 获取指定类型的单例。 /// </summary> /// <typeparam>单例类型。</typeparam> /// <returns>The <see cref="TParameter" />单例对象。</returns> public static TParameter Get<TParameter>() where TParameter : class, new() { return SingletonProvider<TParameter>.Instance; } #endregion } 总结有了以上两种生产单例的方式,我们可以在开发中愉快的使用单例,而免除了具体的繁琐实现。
wif 项目代码:https://github.com/LeoYang610/wif