OwningComponentBase
предназначен для одной конкретной c цели: он предоставляет сервисы, относящиеся к компоненту. Существует три объекта жизни: временные, ограниченные или одиночные. Синглтон не является проблемой, поскольку у вас когда-либо будет только один экземпляр, но переходный процесс и область действия с Blazor работают не совсем правильно, потому что в любой модели хостинга (сервер или клиент) вещи сохраняются гораздо дольше, чем в традиционное веб-приложение.
Существует универсальная c и не универсальная c версия OwningComponentBase
. В версии generi c (той, которую вы используете в настоящее время) вы получаете доступ к одному сервису с определенными областями (через Service
) типа, указанного в параметре типа generi c. Здесь нет ничего по-настоящему волшебного. Это буквально просто установка экземпляра T
, типа generi c, на свойство Service
, которое будет удалено, когда компонент выйдет из области видимости (за что отвечает OwningComponentBase
). Версия non-generi c просто дает вам доступ к свойству ScopedServices
, которое является просто поставщиком услуг с областью действия, из которого вы можете получить любую понравившуюся вам услугу, поэтому вы можете просматривать версию generi c как только с помощью этой службы области действия провайдер, чтобы получить одну услугу для вас и установить Service
с этим.
Длинным и коротким, вы можете бросить любой тип, который вы хотите в параметре типа generi c, предполагая, что он зарегистрирован у поставщика услуг. Все, что вы сказали нам здесь, это то, что это «не работает», поэтому неясно, в чем ваша проблема. Скорее всего, вы просто не зарегистрировали свой ClientService
через что-то вроде services.AddScoped<ClientService>()
.