Я пытаюсь сделать интегрировать Hyprlinkr в проект WebAPI с Autofac.
Я начал писать пользовательские IHttpControllerActivator
но я получаю следующее исключение при попытке разрешить контроллер:Интеграция Hyprlinkr с Autofac
Нет рамки с сопрягая Tag «AutofacWebRequest» виден из сферы, в которых экземпляр запрошен. Как правило, это указывает на то, что компонент, зарегистрированный в соответствии с HTTP-запрос запрашивается по в SingleInstance() компонент (или подобный сценарий.) В рамках интеграции веб- всегда запрашивать зависимости от DependencyResolver.Current или ILifetimeScopeProvider.RequestLifetime, никогда не из самого контейнера.
Вот как класс выглядит следующим образом:
public class AutofacControllerActivator : IHttpControllerActivator
{
private readonly IContainer _container;
public AutofacControllerActivator(IContainer container)
{
if (container == null) throw new ArgumentNullException("container");
_container = container;
}
public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var linker = _container.ResolveOptional<RouteLinker>(
new TypedParameter(typeof(HttpRequestMessage), request));
return (IHttpController) _container.Resolve(controllerType,
new TypedParameter(typeof(IResourceLinker), linker));
}
}
Как получить вопрос Жизненный цикл фиксированной?
Как зарегистрировать свой 'RouteLinker' в контейнере? И если он уже был зарегистрирован, почему вам нужен пользовательский «AutofacControllerActivator», потому что если «RouteLinker» находится в контейнере, вы можете использовать его в своем конструкторе контроллера? – nemesv
«RouteLinker» имеет зависимость от времени выполнения от 'request'. – David