不完全一样:
如何使用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容器作为你的应用程序,但创建一个新的。不理想,但它是一些:)