Asp.net web api Web API模型中的Autofac InstancePerLifetimeScope
在WebAPI2.2中为模型设置依赖项注入时遇到问题。具体地说,我当前执行此操作的方式会导致任何InstancePerLifetimeScope依赖项表现为单实例依赖项 以下是我目前使用JSON.NET解析器所做的工作: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
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以便使用的代码?