get plugin system working
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
namespace Hyperbar;
|
||||
|
||||
public class CommandContext(IServiceProvider serviceProvider) :
|
||||
ICommandContext
|
||||
{
|
||||
public IServiceProvider ServiceProvider => serviceProvider;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Hyperbar;
|
||||
|
||||
public interface ICommandBuilder
|
||||
{
|
||||
void Create(IServiceCollection services);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace Hyperbar;
|
||||
|
||||
public interface ICommandContext
|
||||
{
|
||||
IServiceProvider ServiceProvider { get; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user