【发布时间】:2020-03-09 06:07:16
【问题描述】:
我使用这个合约解析器进行依赖注入 Autofac 和 Json.NET:
public class AutofacContractResolver : DefaultContractResolver
{
private readonly IComponentContext _container;
public AutofacContractResolver(IComponentContext context)
{
_container = context ?? throw new ArgumentNullException(nameof(context));
}
protected override JsonObjectContract CreateObjectContract(Type objectType)
{
var contract = base.CreateObjectContract(objectType);
// use Autofac to create types that have been registered with it
if (_container.IsRegistered(objectType))
{
contract.DefaultCreator = () => _container.Resolve(objectType);
}
return contract;
}
}
然后,我用它和 DI 来初始化 JsonSerializer:
var contractResolver = ctx.Resolve<IContractResolver>(); // ctx = Autofac's IComponentContext
var jsonSerializer = new JsonSerializer
{
ContractResolver = contractResolver, // <-- AutofacContractResolver
};
这种技术与net-core-3.0 中的新System.Text.Json 的等价物是什么——如果已经有的话?我无法弄清楚这一点,也找不到任何与此类似的接口。
【问题讨论】:
-
这很有趣。我不确定它是否内置了这样的东西。
-
@Nkosi 我担心有人会这么说。这将是一个很大的阻碍。从长远来看,我希望他们能实现一些东西。
-
System.Text.Json中的等效类型 --JsonClassInfo和JsonPropertyInfo-- 是internal。有一个开放的增强功能Equivalent of DefaultContractResolver in System.Text.Json #42001 要求公开等效。
标签: c# dependency-injection autofac .net-core-3.0 system.text.json