get plugin system working

This commit is contained in:
TheXamlGuy
2024-01-04 20:53:49 +00:00
parent da8af59391
commit d45076f2a9
24 changed files with 219 additions and 55 deletions
-27
View File
@@ -1,27 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
namespace Hyperbar;
public static class IServiceCollectionExtensions
{
public static IServiceCollection AddDataTemplate<TData, TTemplate>(this IServiceCollection services,
object? key = null)
{
Type dataType = typeof(TData);
Type templateType = typeof(TTemplate);
key ??= dataType.Name;
services.AddKeyedTransient(dataType, key);
services.AddKeyedTransient(templateType, key);
services.AddTransient<IDataTemplateDescriptor>(provider => new DataTemplateDescriptor
{
DataType = dataType,
TemplateType = templateType,
Key = key
});
return services;
}
}
+8
View File
@@ -0,0 +1,8 @@
namespace Hyperbar;
public class CommandContext(IServiceProvider serviceProvider) :
ICommandContext
{
public IServiceProvider ServiceProvider => serviceProvider;
}
+8
View File
@@ -0,0 +1,8 @@
using Microsoft.Extensions.DependencyInjection;
namespace Hyperbar;
public interface ICommandBuilder
{
void Create(IServiceCollection services);
}
+6
View File
@@ -0,0 +1,6 @@
namespace Hyperbar;
public interface ICommandContext
{
IServiceProvider ServiceProvider { get; }
}
+7
View File
@@ -0,0 +1,7 @@
namespace Hyperbar;
public interface ICommandViewModel
{
}
@@ -0,0 +1,53 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Hyperbar;
public static class IServiceCollectionExtensions
{
public static IServiceCollection AddCommandTemplate<TCommand, TCommandTemplate>(this IServiceCollection services)
where TCommand :
ICommandViewModel
{
Type dataType = typeof(TCommand);
Type templateType = typeof(TCommandTemplate);
var key = dataType.Name;
services.AddTransient(typeof(ICommandViewModel), dataType);
services.AddTransient(templateType);
services.AddKeyedTransient(typeof(ICommandViewModel), key, dataType);
services.AddKeyedTransient(templateType, key);
services.AddTransient<IDataTemplateDescriptor>(provider => new DataTemplateDescriptor
{
DataType = dataType,
TemplateType = templateType,
Key = key
});
return services;
}
public static IServiceCollection AddDataTemplate<TData, TTemplate>(this IServiceCollection services,
object? key = null)
{
Type dataType = typeof(TData);
Type templateType = typeof(TTemplate);
key ??= dataType.Name;
services.AddKeyedTransient(dataType, key);
services.AddKeyedTransient(templateType, key);
services.AddTransient<IDataTemplateDescriptor>(provider => new DataTemplateDescriptor
{
DataType = dataType,
TemplateType = templateType,
Key = key
});
return services;
}
}