Мне нужно, чтобы разрешение зависимости для моих служб основывалось на значении HTTP-заголовка во входящем запросе.Доступ к IHttpRequest или IRequestContext из контейнера
Я пытался регистрировать фабричный метод так:
container.Register(c => GetDependencyForRequest(c.Resolve<IHttpRequest>()));
, а также я пробовал:
container.Register(c => GetDependencyForRequest(c.Resolve<IRequestContext>()));
Однако, как бросить ResolutionException
с.
Я бы предпочел, чтобы мне не приходилось садиться на мои Услуги, решив, какую реализацию использовать. Я просто хотел бы, чтобы у них был IDependency
в своем конструкторе и разрешил контейнеру его решить.
Есть ли способ сделать это? Или есть еще один способ сделать это?
Если вы используете [встроенный FunK IOC] ServiceStack (https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container), вы не хотите, чтобы это не было синглом, указав ** ReuseScope .None ** ie 'container.Register (c => new FindDependencyForRequest (HttpContext.Current.ToRequestContext())). ReusedWithin (ReuseScope.None);' – mythz
У меня создалось впечатление, что использование 'Func' перегрузки ' Container.Register' заставлял предоставленную фабрику назвать каждое разрешение, что фактически приводило к кратковременному использованию области повторного использования. Действительно ли 'ReusedWithin (ReuseScope.None)' необходимо? –
rossipedia
Не знаете, почему вы предположили бы, что все документы говорят, что он по умолчанию является одиночным, и вы можете использовать '.ReusedWithin()' для изменения срока службы. [Вот несколько тестов, которые показывают поведение по умолчанию для Funq.] (Https://github.com/ServiceStack/ServiceStack/commit/b7ec3fae3db9fa6ccccd19dcc39ee3167017c8d2) – mythz