Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Ninject;
- namespace ConsoleApplication5
- {
- public class Program
- {
- public static void Main(string[] args)
- {
- var kernel = new StandardKernel();
- // First we create named bindings for ISerializer service
- kernel.Bind<ISerializer>().To<CsvSerializer>().Named("csv");
- kernel.Bind<ISerializer>().To<DatabaseSerializer>().Named("database");
- // Next, we bind all of them as a dictionary, so that dictionary can be used as a constructor argument
- // - Binding name will be the key of the item in a dictionary
- // - Service instance will be the value of the item in a dictionary
- kernel.Bind<IDictionary<string, ISerializer>>().ToMethod(
- context => kernel.GetBindings(typeof (ISerializer))
- .ToDictionary(
- binding => binding.Metadata.Name,
- binding => (ISerializer) kernel.Get(binding.Service, binding.Metadata.Name)));
- // Now we bind Consumer class, so we can get an instance of it
- kernel.Bind<Consumer>().ToSelf();
- var consumer = kernel.Get<Consumer>();
- consumer.Serialize();
- Console.ReadLine();
- }
- }
- public interface ISerializer
- {
- string Serialize();
- }
- public class CsvSerializer : ISerializer
- {
- public string Serialize() => "csv serialized";
- }
- public class DatabaseSerializer : ISerializer
- {
- public string Serialize() => "database serialized";
- }
- public class Consumer
- {
- private readonly IDictionary<string, ISerializer> _serializers;
- public Consumer(IDictionary<string, ISerializer> serializers)
- {
- _serializers = serializers;
- }
- public void Serialize()
- {
- var csvResult = _serializers["csv"].Serialize();
- Console.WriteLine(csvResult);
- var databaseResult = _serializers["database"].Serialize();
- Console.WriteLine(databaseResult);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement