Skip to content

Instantly share code, notes, and snippets.

@cvbarros
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cvbarros/9076378 to your computer and use it in GitHub Desktop.
Save cvbarros/9076378 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Ninject;
using Ninject.Syntax;
namespace JsonDependencyInjection
{
class Program
{
static void Main(string[] args)
{
var kernel = new StandardKernel();
kernel.Bind<SerializedObject>().ToSelf();
kernel.Bind(typeof (NinjectCustomConverter<>)).ToSelf();
const string json = @"{
'Name': 'Instance1',
'ReleaseDate': '1995-4-7T00:00:00',
'Id': 1
}";
var ninjectConverter = kernel.Get<NinjectCustomConverter<SerializedObject>>();
var settings = new JsonSerializerSettings();
settings.Converters.Add(ninjectConverter);
var instance = JsonConvert.DeserializeObject<SerializedObject>(json, settings);
Console.WriteLine(instance.SomeDependency.CreatedAt);
Console.ReadLine();
}
}
internal class NinjectCustomConverter<T> : CustomCreationConverter<T> where T : class
{
private readonly IResolutionRoot _serviceLocator;
public NinjectCustomConverter(IResolutionRoot serviceLocator)
{
_serviceLocator = serviceLocator;
}
public override T Create(Type objectType)
{
return _serviceLocator.Get(objectType) as T;
}
}
public class SerializedObject
{
public Dependency SomeDependency { get; set; }
public SerializedObject(Dependency someDependency)
{
SomeDependency = someDependency;
}
public int Id { get; set; }
public string Name { get; set; }
public DateTime ModifiedDate { get; set; }
}
public class Dependency
{
public DateTime CreatedAt = DateTime.Now;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment