Web API模型中的Autofac InstancePerLifetimeScope

时间:2015-08-30 11:30:00

标签: asp.net-web-api autofac

我在为Web API 2.2中的模型设置依赖注入时遇到了问题。具体来说,我目前正在这样做的方式导致任何“InstancePerLifetimeScope”依赖项表现为“SingleInstance”依赖项。

以下是我目前使用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调用是在创建请求范围之前发生的。它可以解释上述行为,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

考虑使用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;
    }
}