/// <summary> /// Lazyオブジェクトを作成し、StackDisposableに登録します。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="disp"></param> /// <param name="create"></param> /// <param name="leave"></param> /// <returns></returns> public static Lazy <T> CreateLazy <T>(this StackDisposable disp, Func <T> create, Action leave) { var lazy = new Lazy <T>(create); Action act = () => { if (!lazy.IsValueCreated) { return; } leave(); }; disp.Add(act); return(lazy); }
/// <summary> /// StackDisposableにActionを登録します。 /// </summary> /// <param name="disp"></param> /// <param name="act"></param> public static void Add(this StackDisposable disp, Action act) { disp.Add(act.ToDisposable()); }
/// <summary> /// StackDisposableに要素を登録します。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="src"></param> /// <param name="disp"></param> /// <returns></returns> public static T Add <T>(this T src, StackDisposable disp) where T : IDisposable { disp.Add(src); return(src); }