Skip to content

Commit d73465a

Browse files
committed
fix(di): resolve circular dependency TGBot -> CallbackHandlers -> TGBot
Replace direct TGBot injection in media session callbacks with IServiceProvider lazy resolve to break the circular dependency.
1 parent 0c090c0 commit d73465a

1 file changed

Lines changed: 26 additions & 20 deletions

File tree

TelegramBot/Handlers/ICallBackQuery/IMediaSessionCallbackQuery.cs

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,23 @@
1313
using TelegramMediaRelayBot.TelegramBot.Sessions;
1414
using TelegramMediaRelayBot.Database;
1515
using TelegramMediaRelayBot.Database.Interfaces;
16+
using Microsoft.Extensions.DependencyInjection;
1617

1718
namespace TelegramMediaRelayBot.TelegramBot.Handlers.ICallBackQuery;
1819

1920

2021
public class SendToAllContactsSessionCommand : IBotCallbackQueryHandlers
2122
{
22-
private readonly TGBot _tgBot;
23+
private readonly IServiceProvider _serviceProvider;
2324
private readonly IContactGetter _contactGetterRepository;
2425
private readonly IUserGetter _userGetter;
2526

2627
public SendToAllContactsSessionCommand(
27-
TGBot tgBot,
28+
IServiceProvider serviceProvider,
2829
IContactGetter contactGetterRepository,
2930
IUserGetter userGetter)
3031
{
31-
_tgBot = tgBot;
32+
_serviceProvider = serviceProvider;
3233
_contactGetterRepository = contactGetterRepository;
3334
_userGetter = userGetter;
3435
}
@@ -65,22 +66,23 @@ await botClient.EditMessageText(
6566
cancellationToken: ct
6667
);
6768

68-
_ = _tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, targetUserIds, caption: session.Caption ?? "");
69+
var tgBot = _serviceProvider.GetRequiredService<TGBot>();
70+
_ = tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, targetUserIds, caption: session.Caption ?? "");
6971
}
7072
}
7173

7274
public class SendToDefaultGroupsSessionCommand : IBotCallbackQueryHandlers
7375
{
74-
private readonly TGBot _tgBot;
76+
private readonly IServiceProvider _serviceProvider;
7577
private readonly IUserGetter _userGetter;
7678
private readonly IGroupGetter _groupGetter;
7779

7880
public SendToDefaultGroupsSessionCommand(
79-
TGBot tgBot,
81+
IServiceProvider serviceProvider,
8082
IUserGetter userGetter,
8183
IGroupGetter groupGetter)
8284
{
83-
_tgBot = tgBot;
85+
_serviceProvider = serviceProvider;
8486
_userGetter = userGetter;
8587
_groupGetter = groupGetter;
8688
}
@@ -120,17 +122,18 @@ await botClient.EditMessageText(
120122
cancellationToken: ct
121123
);
122124

123-
_ = _tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, targetUserIds, caption: session.Caption ?? "");
125+
var tgBot = _serviceProvider.GetRequiredService<TGBot>();
126+
_ = tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, targetUserIds, caption: session.Caption ?? "");
124127
}
125128
}
126129

127130
public class SendOnlyToMeSessionCommand : IBotCallbackQueryHandlers
128131
{
129-
private readonly TGBot _tgBot;
132+
private readonly IServiceProvider _serviceProvider;
130133

131-
public SendOnlyToMeSessionCommand(TGBot tgBot)
134+
public SendOnlyToMeSessionCommand(IServiceProvider serviceProvider)
132135
{
133-
_tgBot = tgBot;
136+
_serviceProvider = serviceProvider;
134137
}
135138

136139
public string Name => "send_only_to_me:";
@@ -159,24 +162,25 @@ await botClient.EditMessageText(
159162
cancellationToken: ct
160163
);
161164

162-
_ = _tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, caption: session.Caption ?? "");
165+
var tgBot = _serviceProvider.GetRequiredService<TGBot>();
166+
_ = tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, caption: session.Caption ?? "");
163167
}
164168
}
165169

166170
public class SendToSpecifiedGroupsSessionCommand : IBotCallbackQueryHandlers
167171
{
168-
private readonly TGBot _tgBot;
172+
private readonly IServiceProvider _serviceProvider;
169173
private readonly IUserGetter _userGetter;
170174
private readonly IGroupGetter _groupGetter;
171175
private readonly IDefaultActionGetter _defaultActionGetter;
172176

173177
public SendToSpecifiedGroupsSessionCommand(
174-
TGBot tgBot,
178+
IServiceProvider serviceProvider,
175179
IUserGetter userGetter,
176180
IGroupGetter groupGetter,
177181
IDefaultActionGetter defaultActionGetter)
178182
{
179-
_tgBot = tgBot;
183+
_serviceProvider = serviceProvider;
180184
_userGetter = userGetter;
181185
_groupGetter = groupGetter;
182186
_defaultActionGetter = defaultActionGetter;
@@ -224,22 +228,23 @@ await botClient.EditMessageText(
224228
cancellationToken: ct
225229
);
226230

227-
_ = _tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, targetUserIds, caption: session.Caption ?? "");
231+
var tgBot = _serviceProvider.GetRequiredService<TGBot>();
232+
_ = tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, targetUserIds, caption: session.Caption ?? "");
228233
}
229234
}
230235

231236
public class SendToSpecifiedUsersSessionCommand : IBotCallbackQueryHandlers
232237
{
233-
private readonly TGBot _tgBot;
238+
private readonly IServiceProvider _serviceProvider;
234239
private readonly IUserGetter _userGetter;
235240
private readonly IDefaultActionGetter _defaultActionGetter;
236241

237242
public SendToSpecifiedUsersSessionCommand(
238-
TGBot tgBot,
243+
IServiceProvider serviceProvider,
239244
IUserGetter userGetter,
240245
IDefaultActionGetter defaultActionGetter)
241246
{
242-
_tgBot = tgBot;
247+
_serviceProvider = serviceProvider;
243248
_userGetter = userGetter;
244249
_defaultActionGetter = defaultActionGetter;
245250
}
@@ -280,7 +285,8 @@ await botClient.EditMessageText(
280285
cancellationToken: ct
281286
);
282287

283-
_ = _tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, targetUserIds, caption: session.Caption ?? "");
288+
var tgBot = _serviceProvider.GetRequiredService<TGBot>();
289+
_ = tgBot.HandleMediaRequest(botClient, session.Url, chatId, statusMessage, targetUserIds, caption: session.Caption ?? "");
284290
}
285291
}
286292

0 commit comments

Comments
 (0)