Как украсить поставщика услуг?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как украсить поставщика услуг?

Сообщение Anonymous »


Я хочу добавить внедрение свойств в существующий ServiceProvider в основном приложении asp.net. Я подумывал адаптировать и украсить поставщика услуг по умолчанию в своей собственной реализации IServiceProvider. Этот пользовательский поставщик услуг затем становится доступным с помощью специальной реализации IServiceProviderFactory, например:

публичный класс MyCustomServiceProvider: IServiceProvider, ISupportRequiredService, IServiceProviderIsService { частный только для чтения IServiceProvider serviceProvider; public MyCustomServiceProvider (IServiceCollectionContainerBuilder, параметры ServiceProviderOptions) => serviceProvider =ContainerBuilder.BuildServiceProvider(опции); общедоступный объект GetRequiredService (Тип serviceType) => // TODO: украшение serviceProvider.GetRequiredService(типсервиса); общественный объект? GetService(ТипserviceType) => // TODO: украшение serviceProvider.GetService(типсервиса); public bool IsService (Тип serviceType) => serviceProvider.GetService(serviceType) не имеет значения null; } общедоступный класс MyCustomServiceProviderFactory: IServiceProviderFactory { public IServiceCollection CreateBuilder (услуги IServiceCollection) => Services; общедоступный IServiceProvider CreateServiceProvider(IServiceCollectionContainerBuilder) => новый MyCustomServiceProvider(containerBuilder, new()); } Затем в файле Program.cs я регистрирую эту фабрику специального поставщика услуг следующим образом:

var builder = WebApplication.CreateBuilder(args); builder.Host.UseServiceProviderFactory(новый MyCustomServiceProviderFactory()); // ... Однако этот подход работает лишь частично. Услуги фактически будут решаться через специального поставщика услуг. Однако если я разрешаю IServiceProvider, я получаю внутреннего поставщика услуг Microsoft (ServiceProviderEngineScope):

var app = builder.Build(); вар serviceProvider = app.Services.GetRequiredService(); Debug.Assert(serviceProvider — MyCustomServiceProvider); // Не удалось Поэтому мой вопрос заключается в том, как мне правильно создать тонкую оболочку вокруг существующего поставщика услуг в ядре asp.net, чтобы украсить его методы GetService и GetRequiredService (в данном случае путем внедрения свойств возвращаемой службы)?

Поскольку мой проект использует IServiceProvider внутри для некоторых особых сценариев, мне необходимо, чтобы зависимость IServiceProvider также разрешалась моему поставщику услуг поддержки клиентов. Я предполагаю, что это связано с использованием IServiceCollection для создания фактического поставщика услуг. Я изучил реализацию Autofac, и они делают в основном то же самое, за исключением того, что они используют своего собственного внутреннего поставщика услуг и не используют тот, который создан с помощью IServiceCollection.BuildServiceProvider.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»