私のフレームワークのサービス登録メソッドをテストする最も簡単な方法を理解しようとしています。動的サービスを作成していますが、登録は次のようになります。
var messageHubConfig = new DynamicHubServiceConfiguration<Message, MessageDTO>();
messageHubConfig.SetDynamicHubOptions<AstootContext>(async (context, dto) =>
{
return await context.ConversationSubscriptions
.Where(x => x.ConversationId == dto.ConversationId
&& x.IsSubscribed)
.Distinct()
.Select(x => x.User.UniqueIdentifier)
.ToListAsync();
});
messageHubConfig.RequiresDynamicValidator = false;
messageHubConfig.EventMapping.AddCreateEvent(async (sp, obj, dto) =>
{
var conversationService = sp.GetService<IRestEzService<Conversation, ConversationDTO>>();
var conversationDTO = await conversationService.Get(new object[] { dto.ConversationId });
var hubTaskQueue = sp.GetService<IHubServiceTaskQueue>();
hubTaskQueue.QueueDynamicCreate(conversationDTO);
}).When(async (sp, dto) => {
var context = sp.GetService<AstootContext>();
return await context.Conversations.Where(x => x.Id == dto.ConversationId).Where(x => x.Messages.Count == 1).AnyAsync();
});
//Registers service with a hub
restConfiguration.RegisterRestService(typeof(IMessageDTOService),
typeof(MessageDTOService),
messageHubConfig);
Register Rest Serviceメソッドの内部には、さまざまなサービスがあります。
services.AddTransient(restServiceType, (IServiceProvider serviceProvider) =>
{
var restService = (IRestEzService<TEntity, TDTO>)
ActivatorUtilities.CreateInstance(serviceProvider, restServiceImplementationType);
serviceOption.EventMapping?.Register(serviceProvider, restService);
return restService;
});
工場構成が正しく登録されていることをどのように確認できますか?テスト用のサービスコレクションを作成するにはどうすればよいですか?
ServiceCollection
を作成し、
var services = new ServiceCollection();
登録関数を呼び出して、restServiceType
が追加されたことをアサートします。
次に、サービスコレクションからプロバイダーを構築し、restServiceType
を解決します
var provider = services.BuildServiceProvider();
var restService = provider.GetRequiredService(restServiceType);
必要に応じて作成されていることを表明します。
サービスがターゲットタイプを解決できない場合、GetRequiredService
拡張メソッドは例外をスローします。
今、私は他の依存関係を知らないので、それはあなたの例に現在示されているものだけに基づいています。