与此不完全相同:
How do I Inject Dependencies with Ninject, where instances are deserialised from json
答案是,您反序列化的数据类无论如何都不需要服务。有没有办法使用依赖注入与从JsonConverter
派生的类?例如,如果你有这个:
[JsonConverter(typeof(MyCustomConverter))]
public class Foo
{
public string SomeProp { get; set; }
}
和
public class MyCustomConverter : JsonConverter
{
private readonly IMyService myService;
public MyCustomConverter(IMyService _myService)
{
myService = _myService;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var bar = myService.SomeFunctionThatMightEffectDeserialization();
//...
}
}
无论如何都要挂钩JSON.Net如何实例化MyCustomConverter
让它让Ninject做它的事情?
编辑这不会像建议的欺骗一样将服务注入Foo
。这只是注入MyCustomConverter
,以便它可以反序列化Foo
。
答案 0 :(得分:1)
这有点像黑客,但可以通过在JsonSerializerSettings中设置ContractResolver来做类似的事情。在这种情况下,使用Autofac:
Column
然后在转换器中:
var builder = new ContainerBuilder();
builder.RegisterInstance(myService);
var container = builder.Build();
var settings = new JsonSerializerSettings
{
ContractResolver = new AutofacContractResolver(container),
};
所以你并没有真正将服务注入到转换器中,但至少你可以在没有具体依赖的情况下访问它。此外,您不是使用与应用程序相同的Autofac容器,而是创建一个新容器。不理想,但它是:)