2015-08-30 4 views
0

У меня возникли проблемы с настройкой инъекции зависимостей для моделей в Web API 2.2. В частности, способ, которым я в настоящее время это делаю, приводит к любым зависимостям «InstancePerLifetimeScope», действующим как зависимости «SingleInstance».Autofac InstancePerLifetimeScope в моделях Web API

Вот что я сейчас делаю с моим Json.NET распознаватель:

public class AutofacContractResolver : DefaultContractResolver 
{ 
    private readonly IContainer _container; 

    public AutofacContractResolver(IContainer container) 
    { 
     _container = container; 
    } 

    protected override JsonObjectContract CreateObjectContract(Type objectType) 
    { 
     JsonObjectContract contract = base.CreateObjectContract(objectType); 

     if (_container.IsRegistered(objectType)) 
      contract.DefaultCreator =() => _container.Resolve(objectType); 

     return contract; 
    } 
} 

То, что происходит _container.Resolve(objectType) решает тот же экземпляр для каждого запроса. Это отравляет хаос, потому что теперь у меня есть службы, работающие на двух разных сеансах, один из которых устарел.

Я думаю, что вызов Resolve происходит до создания области запроса. Это объясняет описанное выше поведение, но я не уверен, как обойти это.

+0

Можете ли вы показать код, в котором вы устанавливаете распознаватель контракта, чтобы он привык? –

ответ

0

Рассмотрите возможность использования ILifetimeScope вместо IContainer.

+0

К сожалению, поведение аналогично с ILifetimeScope. Однако я заметил, что ILifetimeScope Tag был «root» - это еще одно доказательство того, что ContractResolver работает за пределами области запросов Autofac. –

Смежные вопросы