This commit is contained in:
2021-03-26 00:26:52 +01:00
commit 7ea63e50a3
6 changed files with 128 additions and 0 deletions

4
files/AssemblyInfo.cs Normal file
View File

@@ -0,0 +1,4 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo("Domain.Tests")]
[assembly:InternalsVisibleTo("Wiring")]

24
files/DomainPorts.cs Normal file
View File

@@ -0,0 +1,24 @@
using System;
namespace Domain
{
public static class DomainPorts
{
private static IAdapterResolver _resolver;
internal static T Resolve<T>()
{
if (_resolver == null) throw new NullReferenceException("Adapter resolver is not set!");
return _resolver.Resolve<T>();
}
public static void SetResolver(IAdapterResolver resolver)
{
_resolver = resolver;
}
// public static ILogService LogService => Resolve<ILogService>();
// public static IConfigService ConfigService => Resolve<IConfigService>();
// public static ICacheService CacheService => Resolve<ICacheService>();
}
}

View File

@@ -0,0 +1,7 @@
namespace Domain
{
public interface IAdapterResolver
{
T Resolve<T>();
}
}

59
files/Wiring.cs Normal file
View File

@@ -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<IStartable>()
// .SingleInstance();
//builder.Register(c => new ConsoleOutput()).As<IOutput>().SingleInstance();
RegisterSecondaryPorts(builder);
RegisterPrimaryPorts(builder);
return builder.Build();
}
private static void RegisterSecondaryPorts(ContainerBuilder builder)
{
// builder.RegisterType<LogRepository>().As<ILogRepository>().SingleInstance();
// builder.RegisterType<ConfigRepository>().As<IConfigRepository>().SingleInstance();
// builder.RegisterType<CacheRepository>().As<ICacheRepository>().SingleInstance();
// builder.RegisterType<UnitOfWorkFactory>().As<IUnitOfWorkFactory>().SingleInstance();
}
private static void RegisterPrimaryPorts(ContainerBuilder builder)
{
// builder.RegisterType<LogService>().As<ILogService>().SingleInstance();
// builder.RegisterType<ConfigService>().As<IConfigService>().SingleInstance();
// builder.RegisterType<CacheService>().As<ICacheService>().SingleInstance();
}
public T Resolve<T>()
{
return _container.Resolve<T>();
}
public void Dispose()
{
if (_container != null) {
_container.Dispose();
}
}
}
}

1
kickstart.cmd Normal file
View File

@@ -0,0 +1 @@
powershell -executionpolicy bypass -File %~dp0\kickstart.ps1

33
kickstart.ps1 Normal file
View File

@@ -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