Asp.net web api Web API模型中的Autofac InstancePerLifetimeScope

Asp.net web api Web API模型中的Autofac InstancePerLifetimeScope,asp.net-web-api,autofac,Asp.net Web Api,Autofac,在WebAPI2.2中为模型设置依赖项注入时遇到问题。具体地说,我当前执行此操作的方式会导致任何InstancePerLifetimeScope依赖项表现为单实例依赖项 以下是我目前使用JSON.NET解析器所做的工作: public class AutofacContractResolver : DefaultContractResolver { private readonly IContainer _container; public AutofacContractRes

在WebAPI2.2中为模型设置依赖项注入时遇到问题。具体地说,我当前执行此操作的方式会导致任何InstancePerLifetimeScope依赖项表现为单实例依赖项

以下是我目前使用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.ResolveobjectType为每个请求解析相同的实例。这造成了巨大的破坏,因为我现在在两个不同的会话上运行服务,其中一个已经过时


我认为解析调用发生在创建请求范围之前。它可以解释上述行为,但我不确定如何解决这个问题。

考虑使用ILifetimeScope而不是IContainer

public class AutofacContractResolver : DefaultContractResolver
{
    private readonly ILifetimeScope _container;

    public AutofacContractResolver(ILifetimeScope 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;
    }
}

不幸的是,ILifetimeScope的行为与此相同。但是我注意到ILifetimeScope标记是root-这是ContractResolver在Autofac的请求范围之外运行的进一步证据。能否显示设置ContractResolver以便使用的代码?