是否有一种方法来获得依赖注入与JsonConverter派生自定义转换器



不完全一样:

如何使用Ninject注入依赖关系,其中实例是从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做它的事情?

EDIT这不是像建议的欺骗那样将服务注入Foo。这是只注入到MyCustomConverter,以便它可以反序列化Foo

这是一个hack,但是可以通过在JsonSerializerSettings中设置ContractResolver来做类似的事情。在本例中,使用Autofac:

var builder = new ContainerBuilder();
builder.RegisterInstance(myService);
var container = builder.Build();
var settings = new JsonSerializerSettings
{
    ContractResolver = new AutofacContractResolver(container),
};

,然后在转换器中:

var jsonContract = serializer.ContractResolver.ResolveContract(typeof(IMyService));
var service = (IMyService)jsonContract.DefaultCreator();

所以你并没有真正地将服务注入到转换器中,但至少你可以在没有具体依赖的情况下访问它。此外,你没有使用相同的Autofac容器作为你的应用程序,但创建一个新的。不理想,但它是一些:)

相关内容

  • 没有找到相关文章

最新更新