diff --git a/dotnet/AipsCore/AipsCore.csproj b/dotnet/AipsCore/AipsCore.csproj
index 3f0347f..7b9524e 100644
--- a/dotnet/AipsCore/AipsCore.csproj
+++ b/dotnet/AipsCore/AipsCore.csproj
@@ -8,6 +8,8 @@
+
+
diff --git a/dotnet/AipsCore/Infrastructure/DI/AipsRegistrationExtensions.cs b/dotnet/AipsCore/Infrastructure/DI/AipsRegistrationExtensions.cs
new file mode 100644
index 0000000..cc85caf
--- /dev/null
+++ b/dotnet/AipsCore/Infrastructure/DI/AipsRegistrationExtensions.cs
@@ -0,0 +1,19 @@
+using AipsCore.Application.Abstract;
+using AipsCore.Application.Common.Dispatcher;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace AipsCore.Infrastructure.DI;
+
+public static class AipsRegistrationExtensions
+{
+ public static IServiceCollection AddAips(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.AddHandlersFromAssembly(typeof(Dispatcher).Assembly);
+ services.AddSingleton();
+
+ services.AddPersistence(configuration);
+
+ return services;
+ }
+}
\ No newline at end of file
diff --git a/dotnet/AipsCore/Infrastructure/DI/Configuration/ConfigurationEnvExtensions.cs b/dotnet/AipsCore/Infrastructure/DI/Configuration/ConfigurationEnvExtensions.cs
new file mode 100644
index 0000000..69d8ec1
--- /dev/null
+++ b/dotnet/AipsCore/Infrastructure/DI/Configuration/ConfigurationEnvExtensions.cs
@@ -0,0 +1,25 @@
+using Microsoft.Extensions.Configuration;
+
+namespace AipsCore.Infrastructure.DI.Configuration;
+
+public static class ConfigurationEnvExtensions
+{
+ private const string DbConnStringKey = "DB_CONN_STRING";
+
+ public static string GetEnvConnectionString(this IConfiguration configuration)
+ {
+ return configuration.GetEnvForSure(DbConnStringKey);
+ }
+
+ private static string GetEnvForSure(this IConfiguration configuration, string key)
+ {
+ var value = configuration[key];
+
+ if (value is null)
+ {
+ throw new ConfigurationException(key);
+ }
+
+ return value;
+ }
+}
\ No newline at end of file
diff --git a/dotnet/AipsCore/Infrastructure/DI/Configuration/ConfigurationException.cs b/dotnet/AipsCore/Infrastructure/DI/Configuration/ConfigurationException.cs
new file mode 100644
index 0000000..d031021
--- /dev/null
+++ b/dotnet/AipsCore/Infrastructure/DI/Configuration/ConfigurationException.cs
@@ -0,0 +1,9 @@
+namespace AipsCore.Infrastructure.DI.Configuration;
+
+public class ConfigurationException : Exception
+{
+ public ConfigurationException(string key)
+ : base($"Env configuration error, key '{key}' not set.")
+ {
+ }
+}
\ No newline at end of file
diff --git a/dotnet/AipsCore/Infrastructure/DI/HandlerRegistrationExtensions.cs b/dotnet/AipsCore/Infrastructure/DI/HandlerRegistrationExtensions.cs
new file mode 100644
index 0000000..21caee5
--- /dev/null
+++ b/dotnet/AipsCore/Infrastructure/DI/HandlerRegistrationExtensions.cs
@@ -0,0 +1,42 @@
+using System.Reflection;
+using AipsCore.Application.Abstract.Command;
+using AipsCore.Application.Abstract.Query;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace AipsCore.Infrastructure.DI;
+
+public static class HandlerRegistrationExtensions
+{
+ public static IServiceCollection AddHandlersFromAssembly(this IServiceCollection services, Assembly assembly)
+ {
+ var handlerInterfaces = new[]
+ {
+ typeof(ICommandHandler<>),
+ typeof(ICommandHandler<,>),
+ typeof(IQueryHandler<,>)
+ };
+
+ var types = assembly.GetTypes()
+ .Where(t => t is { IsAbstract: false, IsInterface: false });
+
+ foreach (var type in types)
+ {
+ var interfaces = type.GetInterfaces();
+
+ foreach (var @interface in interfaces)
+ {
+ if (!@interface.IsGenericType)
+ continue;
+
+ var genericDef = @interface.GetGenericTypeDefinition();
+
+ if (!handlerInterfaces.Contains(genericDef))
+ continue;
+
+ services.AddScoped(@interface, type);
+ }
+ }
+
+ return services;
+ }
+}
\ No newline at end of file
diff --git a/dotnet/AipsCore/Infrastructure/DI/PersistenceRegistrationExtensions.cs b/dotnet/AipsCore/Infrastructure/DI/PersistenceRegistrationExtensions.cs
new file mode 100644
index 0000000..04e6578
--- /dev/null
+++ b/dotnet/AipsCore/Infrastructure/DI/PersistenceRegistrationExtensions.cs
@@ -0,0 +1,20 @@
+using AipsCore.Infrastructure.DI.Configuration;
+using AipsCore.Infrastructure.Persistence.Db;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace AipsCore.Infrastructure.DI;
+
+public static class PersistenceRegistrationExtensions
+{
+ public static IServiceCollection AddPersistence(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.AddDbContext(options =>
+ {
+ options.UseNpgsql(configuration.GetEnvConnectionString());
+ });
+
+ return services;
+ }
+}
\ No newline at end of file