C#Ninject在从JSON反序列化时未注入

C#Ninject在从JSON反序列化时未注入,c#,service,json.net,ninject,.net-framework-4.8,C#,Service,Json.net,Ninject,.net Framework 4.8,我正在编写一个简单的windows服务,我想使用依赖项注入。 在服务启动时,应用程序从文件中读取JSON字符串,并将其反序列化为对象。 JSON中的一个属性是“Bar”对象列表,我想在“Bar”构造函数中注入FooService。 我怀疑下面的代码可以工作,但“Bar”构造函数中的“service”为空 有人能告诉我,为什么这个代码不起作用,以及如何把它改成可以工作的吗 这是我的密码: Ninject.cs class NinjectBindings : Ninject.Modules.Ninj

我正在编写一个简单的windows服务,我想使用依赖项注入。 在服务启动时,应用程序从文件中读取JSON字符串,并将其反序列化为对象。 JSON中的一个属性是“Bar”对象列表,我想在“Bar”构造函数中注入FooService。 我怀疑下面的代码可以工作,但“Bar”构造函数中的“service”为空

有人能告诉我,为什么这个代码不起作用,以及如何把它改成可以工作的吗

这是我的密码:

Ninject.cs

class NinjectBindings : Ninject.Modules.NinjectModule
    {
        public override void Load()
        {
            Bind<IFooService>().To<FooService>();
            Bind<Bar>().ToSelf().WithConstructorArgument("service", ctx => ctx.Kernel.Get<IFooService>());
        }
    }
从NinjectBindings中删除Bind,并将SerializationMethod更改为:

     var json = JsonConvert.DeserializeObject<Deserializator>("{}", new 
          JsonSerializerSettings()
        {
           ContractResolver = new NinjectResolver(new StandardKernel(new NinjectBindings()))
        });
var json=JsonConvert.DeserializeObject(“{}”,新建)
JsonSerializerSettings()
{
ContractResolver=新的NinjectResolver(新的标准内核(新的NinjectBindings()))
});
现在,它起作用了

public class Bar {
        private readonly IFooService _fooService;
        public Bar (IFooService service){
             // here service is null

           using (var kernel = new StandardKernel(new NinjectBindings())){
                var kernelService = kernel.Get<IFooService>();
                // here kernelService is NOT null
             }
        }
} 
class NinjectResolver : DefaultContractResolver
    {
        private readonly IKernel _container;

        public NinjectResolver(IKernel container)
        {
            _container = container;
        }

        protected override JsonObjectContract CreateObjectContract(Type objectType)
        {
            if (_container.TryGet(objectType) != null)
            {
                JsonObjectContract contract = ResolveContact(objectType);
                contract.DefaultCreator = () => _container.Get(objectType);

                return contract;
            }

            return base.CreateObjectContract(objectType);
        }

        private JsonObjectContract ResolveContact(Type objectType)
        {
            return base.CreateObjectContract(objectType);
        }
    }
     var json = JsonConvert.DeserializeObject<Deserializator>("{}", new 
          JsonSerializerSettings()
        {
           ContractResolver = new NinjectResolver(new StandardKernel(new NinjectBindings()))
        });