Я пытаюсь иметь два типа регистрации для одной и той же услуги (ServiceA
). Я хочу, чтобы один из них был scoped
(один экземпляр на запрос клиента), а другой - transient
(новый экземпляр каждый раз, когда от преобразователя требуется предоставить экземпляр).
Это так, когда клиент делает запрос, у меня нет нескольких экземпляров ServiceA
, плавающих вокруг, когда передача одного из них сделает работу, но мне также нужно иметь возможность вращать один экземпляр по требованию, когда я прошу распознаватель разрешить экземпляр BackgroundJobService
экземпляр (который зависит от НОВОГО экземпляра ServiceA
, потому что экземпляр области действия удаляется, как только заканчивается запрос).
В Unity вы можете сделать что-то вроде:
//this will spin a new instance
container.RegisterType<DataProvider>("ForBackgroundJobs", new ContainerControlledLifetimeManager());
//this will return the same instance when resolved in the context of a request
container.RegisterType<DataProvider>(new Unity.AspNet.Mvc.PerRequestLifetimeManager());
А при разрешении
var service = container.Resolve<DataProvider>("ForBackgroundJobs"); // a new instance, each time this is called...
var service = container.Resolve<DataProvider>(); //same instance every time this is callede within the request.
Есть ли способ сделать что-то подобное с. NET поставщиком услуг Core?