More project base
This commit is contained in:
148
src/Library/InitableService/Initable.cs
Normal file
148
src/Library/InitableService/Initable.cs
Normal 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);
|
||||
}
|
||||
|
||||
|
||||
1193
src/Library/InitableService/InitableExtensions.cs
Normal file
1193
src/Library/InitableService/InitableExtensions.cs
Normal file
File diff suppressed because it is too large
Load Diff
13
src/Library/InitableService/InitableService.csproj
Normal file
13
src/Library/InitableService/InitableService.csproj
Normal 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>
|
||||
180
src/Library/InitableService/generateExtensions.csx
Normal file
180
src/Library/InitableService/generateExtensions.csx
Normal 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("}");
|
||||
}
|
||||
66
src/Library/InitableService/generateInterfaces.csx
Normal file
66
src/Library/InitableService/generateInterfaces.csx
Normal 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("}");
|
||||
}
|
||||
Reference in New Issue
Block a user