From 7ea63e50a39a88b4671b3c666982fe98c1f830c8 Mon Sep 17 00:00:00 2001 From: Niels Kooiman Date: Fri, 26 Mar 2021 00:26:52 +0100 Subject: [PATCH] Initial --- files/AssemblyInfo.cs | 4 +++ files/DomainPorts.cs | 24 ++++++++++++++++ files/IAdapterResolver.cs | 7 +++++ files/Wiring.cs | 59 +++++++++++++++++++++++++++++++++++++++ kickstart.cmd | 1 + kickstart.ps1 | 33 ++++++++++++++++++++++ 6 files changed, 128 insertions(+) create mode 100644 files/AssemblyInfo.cs create mode 100644 files/DomainPorts.cs create mode 100644 files/IAdapterResolver.cs create mode 100644 files/Wiring.cs create mode 100644 kickstart.cmd create mode 100644 kickstart.ps1 diff --git a/files/AssemblyInfo.cs b/files/AssemblyInfo.cs new file mode 100644 index 0000000..2904efe --- /dev/null +++ b/files/AssemblyInfo.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; + +[assembly:InternalsVisibleTo("Domain.Tests")] +[assembly:InternalsVisibleTo("Wiring")] \ No newline at end of file diff --git a/files/DomainPorts.cs b/files/DomainPorts.cs new file mode 100644 index 0000000..670af19 --- /dev/null +++ b/files/DomainPorts.cs @@ -0,0 +1,24 @@ +using System; + +namespace Domain +{ + public static class DomainPorts + { + private static IAdapterResolver _resolver; + + internal static T Resolve() + { + if (_resolver == null) throw new NullReferenceException("Adapter resolver is not set!"); + return _resolver.Resolve(); + } + + public static void SetResolver(IAdapterResolver resolver) + { + _resolver = resolver; + } + + // public static ILogService LogService => Resolve(); + // public static IConfigService ConfigService => Resolve(); + // public static ICacheService CacheService => Resolve(); + } +} diff --git a/files/IAdapterResolver.cs b/files/IAdapterResolver.cs new file mode 100644 index 0000000..f32c06a --- /dev/null +++ b/files/IAdapterResolver.cs @@ -0,0 +1,7 @@ +namespace Domain +{ + public interface IAdapterResolver + { + T Resolve(); + } +} diff --git a/files/Wiring.cs b/files/Wiring.cs new file mode 100644 index 0000000..94f29ef --- /dev/null +++ b/files/Wiring.cs @@ -0,0 +1,59 @@ +using System; +using Autofac; +using Domain; + +namespace Wiring +{ + public class Wiring : IAdapterResolver, IDisposable + { + private readonly IContainer _container; + + public Wiring() + { + _container = Wire(); + DomainPorts.SetResolver(this); + } + + static IContainer Wire() + { + var builder = new ContainerBuilder(); + + //builder.RegisterAssemblyTypes(typeof(ConsoleOutput).Assembly) + // .Where(t => typeof(IStartable).IsAssignableFrom(t)) + // .As() + // .SingleInstance(); + //builder.Register(c => new ConsoleOutput()).As().SingleInstance(); + + RegisterSecondaryPorts(builder); + RegisterPrimaryPorts(builder); + return builder.Build(); + } + + private static void RegisterSecondaryPorts(ContainerBuilder builder) + { + // builder.RegisterType().As().SingleInstance(); + // builder.RegisterType().As().SingleInstance(); + // builder.RegisterType().As().SingleInstance(); + // builder.RegisterType().As().SingleInstance(); + } + + private static void RegisterPrimaryPorts(ContainerBuilder builder) + { + // builder.RegisterType().As().SingleInstance(); + // builder.RegisterType().As().SingleInstance(); + // builder.RegisterType().As().SingleInstance(); + } + + public T Resolve() + { + return _container.Resolve(); + } + + public void Dispose() + { + if (_container != null) { + _container.Dispose(); + } + } + } +} diff --git a/kickstart.cmd b/kickstart.cmd new file mode 100644 index 0000000..139b550 --- /dev/null +++ b/kickstart.cmd @@ -0,0 +1 @@ +powershell -executionpolicy bypass -File %~dp0\kickstart.ps1 \ No newline at end of file diff --git a/kickstart.ps1 b/kickstart.ps1 new file mode 100644 index 0000000..8d92178 --- /dev/null +++ b/kickstart.ps1 @@ -0,0 +1,33 @@ +New-Item -ItemType Directory -Force -Path output +pushd output +git init +# solution +dotnet new sln -n Solution +dotnet new gitignore +dotnet new globaljson +dotnet new nugetconfig +# domain project +dotnet new classlib -n Domain +dotnet sln add Domain +# unit test project +dotnet new nunit -n Domain.Tests +dotnet add Domain.Tests package NSubstitute +dotnet sln add Domain.Tests +dotnet add Domain.Tests reference Domain +# wiring project +dotnet new classlib -n Wiring +dotnet sln add Wiring +dotnet add Wiring reference Domain +dotnet add Wiring package Autofac +# use webapi and/or console +# webapi project +#dotnet new webapi -n WebApi +#dotnet sln add WebApi +#dotnet add WebApi reference Domain +#dotnet add WebApi reference Wiring +# console project +dotnet new console -n ConsoleApp +dotnet sln add ConsoleApp +dotnet add ConsoleApp reference Domain +dotnet add ConsoleApp reference Wiring +popd \ No newline at end of file