From 18413729525cf402c87577be53b409030215651f Mon Sep 17 00:00:00 2001 From: Aleksander Zverev Date: Tue, 7 Jul 2020 14:44:44 +0500 Subject: [PATCH 1/4] DI-Container Version with Ninject.Modules --- Program.cs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/Program.cs b/Program.cs index 9eca2bf..78a69a4 100644 --- a/Program.cs +++ b/Program.cs @@ -2,11 +2,35 @@ 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 CreateExecutorUsingModules() + { + var container = new StandardKernel(new CommandsModule()); + return container.Get(); + } + private static ICommandsExecutor CreateExecutor() { var container = new StandardKernel(); @@ -74,7 +98,8 @@ private static ICommandsExecutor CreateExecutor() static void Main(string[] args) { - ICommandsExecutor executor = CreateExecutor(); + //ICommandsExecutor executor = CreateExecutor(); + ICommandsExecutor executor = CreateExecutorUsingModules(); if (args.Length> 0) executor.Execute(args); else From 03c46b52dd528f07535db05821c33e31187dc991 Mon Sep 17 00:00:00 2001 From: Aleksander Zverev Date: Tue, 7 Jul 2020 14:46:09 +0500 Subject: [PATCH 2/4] DI-Container. Only Ninject.Modules --- Program.cs | 70 ++---------------------------------------------------- 1 file changed, 2 insertions(+), 68 deletions(-) diff --git a/Program.cs b/Program.cs index 78a69a4..d122f69 100644 --- a/Program.cs +++ b/Program.cs @@ -25,81 +25,15 @@ public override void Load() public class Program { - private static ICommandsExecutor CreateExecutorUsingModules() - { - var container = new StandardKernel(new CommandsModule()); - return container.Get(); - } - 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(); } static void Main(string[] args) { - //ICommandsExecutor executor = CreateExecutor(); - ICommandsExecutor executor = CreateExecutorUsingModules(); + ICommandsExecutor executor = CreateExecutor(); if (args.Length> 0) executor.Execute(args); else From d52e3ecd6ad051fc2812063635bd6b97717e5821 Mon Sep 17 00:00:00 2001 From: Pavel Egorov Date: Wed, 8 Jul 2020 11:27:41 +0500 Subject: [PATCH 3/4] Create README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..6a9c795 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# Пример для лекции про 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 From d57cef46a4caf9d6ecbbe0d847a96ae5f2b591a5 Mon Sep 17 00:00:00 2001 From: Pavel Egorov Date: Wed, 8 Jul 2020 11:31:13 +0500 Subject: [PATCH 4/4] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6a9c795..9012d92 100644 --- a/README.md +++ b/README.md @@ -10,3 +10,5 @@ * https://github.com/urfu-code/CommandLineTool/tree/ServiceLocatorCode * https://github.com/urfu-code/CommandLineTool/tree/DIContainerCode + +* https://github.com/urfu-code/CommandLineTool

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