@@ -68,47 +68,142 @@ public void SetOwner(IComponent owner)
6868 Owner = owner ;
6969 }
7070
71+ /// <summary>
72+ /// 标记组件是否已执行过激活前预处理
73+ /// </summary>
74+ protected bool IsInvokedBeforeActivation { get ; private set ; }
75+
7176 /// <summary>
7277 /// 组件激活前的预处理操作
7378 /// </summary>
74- /// <returns>一个已完成的任务</returns>
75- public virtual Task BeforeActivation ( ) => Task . CompletedTask ;
79+ /// <returns>
80+ /// 返回一个 Task<bool> 对象:
81+ /// - true:表示预处理成功且是首次执行
82+ /// - false:表示已经执行过预处理
83+ /// </returns>
84+ public virtual Task < bool > BeforeActivation ( )
85+ {
86+ if ( IsInvokedBeforeActivation )
87+ {
88+ return Task . FromResult ( false ) ;
89+ }
90+
91+ IsInvokedBeforeActivation = true ;
92+
93+ return Task . FromResult ( true ) ;
94+ }
95+
96+ /// <summary>
97+ /// 标记组件是否已执行过激活操作
98+ /// </summary>
99+ protected bool IsInvokedActivation { get ; private set ; }
76100
77101 /// <summary>
78102 /// 激活组件
79103 /// </summary>
80- /// <returns>一个已完成的任务</returns>
81- public virtual Task Active ( )
104+ /// <returns>
105+ /// 返回一个 Task<bool> 对象:
106+ /// - true:表示激活成功且是首次执行
107+ /// - false:表示组件已经被激活过
108+ /// </returns>
109+ public virtual Task < bool > Active ( )
82110 {
83- return Task . CompletedTask ;
111+ if ( IsInvokedActivation )
112+ {
113+ return Task . FromResult ( false ) ;
114+ }
115+
116+ IsInvokedActivation = true ;
117+
118+ return Task . FromResult ( true ) ;
84119 }
85120
121+ /// <summary>
122+ /// 标记组件是否已执行过激活后处理
123+ /// </summary>
124+ protected bool IsInvokedAfterActivation { get ; private set ; }
125+
86126 /// <summary>
87127 /// 组件激活后的后处理操作
88128 /// </summary>
89- /// <returns>一个已完成的任务</returns>
90- public virtual Task AfterActivation ( ) => Task . CompletedTask ;
129+ /// <returns>
130+ /// 返回一个 Task<bool> 对象:
131+ /// - true:表示后处理成功且是首次执行
132+ /// - false:表示已经执行过后处理
133+ /// </returns>
134+ public virtual Task < bool > AfterActivation ( )
135+ {
136+ if ( IsInvokedAfterActivation )
137+ {
138+ return Task . FromResult ( false ) ;
139+ }
140+
141+ IsInvokedAfterActivation = true ;
142+
143+ return Task . FromResult ( true ) ;
144+ }
145+
146+ /// <summary>
147+ /// 标记组件是否已执行过反激活前预处理
148+ /// </summary>
149+ protected bool IsInvokedBeforeInActivation { get ; private set ; }
91150
92151 /// <summary>
93152 /// 组件反激活前的预处理操作
94153 /// </summary>
95- /// <returns>一个已完成的任务</returns>
96- public virtual Task BeforeInActivation ( ) => Task . CompletedTask ;
154+ /// <returns>
155+ /// 返回一个 Task<bool> 对象:
156+ /// - true:表示预处理成功且是首次执行
157+ /// - false:表示已经执行过预处理
158+ /// </returns>
159+ public virtual Task < bool > BeforeInActivation ( )
160+ {
161+ if ( IsInvokedBeforeInActivation )
162+ {
163+ return Task . FromResult ( false ) ;
164+ }
165+
166+ IsInvokedBeforeInActivation = true ;
167+
168+ return Task . FromResult ( true ) ;
169+ }
97170
98171 /// <summary>
99172 /// 反激活组件
100173 /// </summary>
101- /// <returns>一个已完成的任务</returns>
174+ /// <returns>
175+ /// 返回一个已完成的 Task 对象。
176+ /// 注意:此方法不检查执行状态,可以多次调用
177+ /// </returns>
102178 public virtual Task Inactive ( )
103179 {
104180 return Task . CompletedTask ;
105181 }
106182
183+ /// <summary>
184+ /// 标记组件是否已执行过反激活后处理
185+ /// </summary>
186+ protected bool IsInvokedAfterInActivation { get ; private set ; }
187+
107188 /// <summary>
108189 /// 组件反激活后的后处理操作
109190 /// </summary>
110- /// <returns>一个已完成的任务</returns>
111- public virtual Task AfterInActivation ( ) => Task . CompletedTask ;
191+ /// <returns>
192+ /// 返回一个 Task<bool> 对象:
193+ /// - true:表示后处理成功且是首次执行
194+ /// - false:表示已经执行过后处理
195+ /// </returns>
196+ public virtual Task < bool > AfterInActivation ( )
197+ {
198+ if ( IsInvokedAfterInActivation )
199+ {
200+ return Task . FromResult ( false ) ;
201+ }
202+
203+ IsInvokedAfterInActivation = true ;
204+
205+ return Task . FromResult ( true ) ;
206+ }
112207
113208 /// <summary>
114209 /// 根据代理类型获取组件代理实例
0 commit comments