Last active
August 29, 2015 13:56
-
-
Save cvbarros/9076378 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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