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