diff --git a/Program.cs b/Program.cs index 9eca2bf..d122f69 100644 --- a/Program.cs +++ b/Program.cs @@ -2,73 +2,32 @@ using System.IO; using Ninject; using Ninject.Extensions.Conventions; +using Ninject.Modules; namespace CommandLineTool { + public class CommandsModule : NinjectModule + { + public override void Load() + { + Kernel.Bind(f => + { + var commandTypes = f.FromThisAssembly().Select(typeof(ConsoleCommand).IsAssignableFrom); + commandTypes.BindAllBaseClasses().Configure(c => c.InSingletonScope()); + }); + Kernel.Bind().To().InSingletonScope(); + Kernel.Bind().To() + .WhenInjectedInto().InSingletonScope(); + Kernel.Bind().To() + .WhenInjectedInto().InSingletonScope(); + } + } + public class Program { private static ICommandsExecutor CreateExecutor() { - var container = new StandardKernel(); - - #region Варианты биндинга CommandExecutor-а - /* - container.Bind().To().InSingletonScope(); - */ - - /* - container.Bind().To() - .InSingletonScope() - .WithConstructorArgument((TextWriter)new RedTextConsoleWriter()); - */ - - /* - container.Bind().To() - .InSingletonScope() - //"При обращении к аргументу конструктора TextWriter присвой пожалуйста следующий тип" - .WithConstructorArgument(typeof(TextWriter), c => c.Kernel.Get()); - */ - - // /* - container.Bind(c => c.FromThisAssembly().SelectAllClasses().BindAllInterfaces()); - // */ - #endregion - - #region Варианты биндинга комманд - /* - container.Bind().To(); - container.Bind().To(); - container.Bind().To(); - container.Bind().To(); - */ - - // /* - container.Bind(c => c.FromThisAssembly().SelectAllClasses().BindAllBaseClasses()); - // */ - #endregion - - #region Варианты биндинга TextWriter-ов - /* - //Единый TextWriter - container.Bind().ToConstant(Console.Out); - */ - - //TextWriter для консольных команд - container.Bind().To() - .WhenInjectedInto(); - - // /* - //TextWriter для Executor-а - container.Bind().To() - .WhenInjectedInto(); - // */ - - /* - //Биндинг с использование атрибута Named. - container.Bind().To().Named("error"); - */ - #endregion - + var container = new StandardKernel(new CommandsModule()); return container.Get(); } diff --git a/README.md b/README.md new file mode 100644 index 0000000..9012d92 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# Пример для лекции про DI-контейнеры + + +Разные этапы внедрения DI-контейнера: + +* https://github.com/urfu-code/CommandLineTool/tree/ProceduralCode + +* https://github.com/urfu-code/CommandLineTool/tree/DIPCode + +* https://github.com/urfu-code/CommandLineTool/tree/ServiceLocatorCode + +* https://github.com/urfu-code/CommandLineTool/tree/DIContainerCode + +* https://github.com/urfu-code/CommandLineTool

AltStyle によって変換されたページ (->オリジナル) /