More project base

This commit is contained in:
2022-04-01 20:38:43 +02:00
parent d0edf85e98
commit 8e09bf41bb
76 changed files with 3589 additions and 78 deletions

View File

@@ -0,0 +1,148 @@
// Autogenerated
namespace InitableService;
public interface IInitable
{
void Init();
}
public interface IInitable<T1>
{
void Init(T1 obj1);
}
public interface IInitable<T1, T2>
{
void Init(T1 obj1, T2 obj2);
}
public interface IInitable<T1, T2, T3>
{
void Init(T1 obj1, T2 obj2, T3 obj3);
}
public interface IInitable<T1, T2, T3, T4>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4);
}
public interface IInitable<T1, T2, T3, T4, T5>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5);
}
public interface IInitable<T1, T2, T3, T4, T5, T6>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7, T8>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11, T12 obj12);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11, T12 obj12, T13 obj13);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11, T12 obj12, T13 obj13, T14 obj14);
}
public interface IInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>
{
void Init(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11, T12 obj12, T13 obj13, T14 obj14, T15 obj15);
}
public interface IAsyncInitable
{
Task InitAsync();
}
public interface IAsyncInitable<T1>
{
Task InitAsync(T1 obj1);
}
public interface IAsyncInitable<T1, T2>
{
Task InitAsync(T1 obj1, T2 obj2);
}
public interface IAsyncInitable<T1, T2, T3>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3);
}
public interface IAsyncInitable<T1, T2, T3, T4>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7, T8>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11, T12 obj12);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11, T12 obj12, T13 obj13);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11, T12 obj12, T13 obj13, T14 obj14);
}
public interface IAsyncInitable<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>
{
Task InitAsync(T1 obj1, T2 obj2, T3 obj3, T4 obj4, T5 obj5, T6 obj6, T7 obj7, T8 obj8, T9 obj9, T10 obj10, T11 obj11, T12 obj12, T13 obj13, T14 obj14, T15 obj15);
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,180 @@
#!/usr/bin/env dotnet-script
{
const string header =
@"// Autogenerated
using InitableService;
namespace Microsoft.Extensions.DependencyInjection;
public static class InitableExtensions
{
";
const string footer = "}";
using var initableWriter = File.CreateText("InitableExtensions.cs");
initableWriter.WriteLine(header);
const int generateForParams = 15;
for (var i = 0; i <= generateForParams; i++)
{
WriteInitableExtension(initableWriter, false, i);
initableWriter.WriteLine();
}
for (var i = 0; i <= generateForParams; i++)
{
WriteInitableExtension(initableWriter, true, i);
initableWriter.WriteLine();
}
initableWriter.WriteLine(footer);
for (var i = 0; i <= generateForParams; i++)
{
WriteInitableResolver(initableWriter, false, i);
initableWriter.WriteLine();
}
for (var i = 0; i <= generateForParams; i++)
{
WriteInitableResolver(initableWriter, true, i);
initableWriter.WriteLine();
}
initableWriter.Flush();
}
void WriteInitableExtension(StreamWriter initableWriter, bool isAsync, int i)
{
initableWriter.Write($"\tpublic static {(isAsync ? "Async" : "")}Resolver");
if (i > 0)
{
initableWriter.Write("<");
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => "T" + c)));
initableWriter.Write(">");
}
initableWriter.Write($" Get{(isAsync ? "Async" : "")}InitableResolver");
if (i > 0)
{
initableWriter.Write("<");
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => "T" + c)));
initableWriter.Write(">");
}
initableWriter.Write("(");
var thisParameter = "this IServiceProvider serviceProvider";
if (i > 0)
{
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => $"T{c} obj{c}").Prepend(thisParameter)));
}
else
{
initableWriter.Write(thisParameter);
}
initableWriter.WriteLine(")");
initableWriter.WriteLine("\t{");
initableWriter.Write($"\t\treturn new {(isAsync ? "Async" : "")}Resolver");
if (i > 0)
{
initableWriter.Write("<");
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => "T" + c)));
initableWriter.Write(">");
}
initableWriter.Write("(");
if (i > 0)
{
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => $"obj{c}").Prepend("serviceProvider")));
}
else
{
initableWriter.Write("serviceProvider");
}
initableWriter.WriteLine(");");
initableWriter.WriteLine("\t}");
}
void WriteInitableResolver(StreamWriter initableWriter, bool isAsync, int i)
{
initableWriter.Write($"public class {(isAsync ? "Async" : "")}Resolver");
if (i > 0)
{
initableWriter.Write("<");
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => "T" + c)));
initableWriter.Write(">");
}
initableWriter.WriteLine();
initableWriter.WriteLine("{");
initableWriter.WriteLine("\tIServiceProvider _serviceProvider;");
if (i > 0)
{
for (var j = 1; j <= i; j++)
{
initableWriter.WriteLine($"\tprivate T{j} _obj{j};");
}
}
initableWriter.Write($"\tpublic {(isAsync ? "Async" : "")}Resolver(");
if (i > 0)
{
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => $"T{c} obj{c}").Prepend("IServiceProvider serviceProvider")));
}
else
{
initableWriter.Write("IServiceProvider serviceProvider");
}
initableWriter.WriteLine(")");
initableWriter.WriteLine("\t{");
initableWriter.WriteLine("\t\t_serviceProvider = serviceProvider;");
if (i > 0)
{
for (var j = 1; j <= i; j++)
{
initableWriter.WriteLine($"\t\t_obj{j} = obj{j};");
}
}
initableWriter.WriteLine("\t}");
initableWriter.WriteLine("");
var returnType = isAsync ? "async Task<TResult>" : "TResult";
initableWriter.WriteLine($"\tpublic {returnType} GetRequiredService{(isAsync ? "Async" : "")}<TResult>()");
initableWriter.Write($"\t\twhere TResult : class, I{(isAsync ? "Async" : "")}Initable");
if (i > 0)
{
initableWriter.Write("<");
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => "T" + c)));
initableWriter.Write(">");
}
initableWriter.WriteLine("");
initableWriter.WriteLine("\t{");
initableWriter.WriteLine("\t\tvar initableService = _serviceProvider.GetRequiredService<TResult>()!;");
if (isAsync)
{
initableWriter.Write("\t\tawait initableService.InitAsync");
}
else
{
initableWriter.Write("\t\tinitableService.Init");
}
initableWriter.Write("(");
if (i > 0)
{
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => $"_obj{c}")));
}
initableWriter.WriteLine(");");
initableWriter.WriteLine("\t\treturn initableService;");
initableWriter.WriteLine("\t}");
initableWriter.WriteLine("}");
}

View File

@@ -0,0 +1,66 @@
#!/usr/bin/env dotnet-script
{
const string header =
@"// Autogenerated
namespace InitableService;
";
const string footer = "";
using var initableWriter = File.CreateText("Initable.cs");
initableWriter.WriteLine(header);
const int generateForParams = 15;
for (var i = 0; i <= generateForParams; i++)
{
WriteInitable(initableWriter, false, i);
}
for (var i = 0; i <= generateForParams; i++)
{
WriteInitable(initableWriter, true, i);
initableWriter.WriteLine();
}
initableWriter.WriteLine(footer);
initableWriter.Flush();
}
void WriteInitable(StreamWriter initableWriter, bool isAsync, int i)
{
initableWriter.Write($"public interface I{(isAsync ? "Async" : "")}Initable");
if (i > 0)
{
initableWriter.Write("<");
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => "T" + c)));
initableWriter.Write(">");
}
initableWriter.WriteLine();
initableWriter.WriteLine("{");
if (isAsync)
{
initableWriter.Write("\tTask InitAsync");
}
else
{
initableWriter.Write("\tvoid Init");
}
if (i > 0)
{
/*initableWriter.Write("<");
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => "T" + c)));
initableWriter.Write(">");*/
initableWriter.Write("(");
initableWriter.Write(string.Join(", ", Enumerable.Range(1, i).Select(c => $"T{c} obj{c}")));
initableWriter.Write(")");
}
else
{
initableWriter.Write("()");
}
initableWriter.WriteLine(";");
initableWriter.WriteLine("}");
}