code sweep

This commit is contained in:
Daniel Clark
2022-12-10 16:11:07 +00:00
parent 4f243eba2e
commit 0da4a37173
84 changed files with 2040 additions and 2104 deletions
@@ -1,7 +1,6 @@
namespace Toolkit.Foundation
namespace Toolkit.Framework.Foundation;
public interface IServiceCreator<T>
{
public interface IServiceCreator<T>
{
object Create(Func<Type, object[], object> creator, params object[] parameters);
}
}
object Create(Func<Type, object[], object> creator, params object[] parameters);
}
@@ -1,9 +1,8 @@
namespace Toolkit.Foundation
{
public interface IServiceFactory
{
object? Create(Type type, params object?[] parameters);
namespace Toolkit.Framework.Foundation;
T? Create<T>(Type type, params object?[] parameters);
}
}
public interface IServiceFactory
{
object? Create(Type type, params object?[] parameters);
T? Create<T>(Type type, params object?[] parameters);
}
@@ -1,10 +1,9 @@
namespace Toolkit.Foundation
namespace Toolkit.Framework.Foundation;
public class ServiceCreator<I, T> : IServiceCreator<I>
{
public class ServiceCreator<I, T> : IServiceCreator<I>
public virtual object Create(Func<Type, object[], object> creator, params object[] parameters)
{
public virtual object Create(Func<Type, object[], object> creator, params object[] parameters)
{
return creator(typeof(T), parameters);
}
return creator(typeof(T), parameters);
}
}
}
+22 -23
View File
@@ -1,26 +1,25 @@
namespace Toolkit.Foundation
namespace Toolkit.Framework.Foundation;
public class ServiceFactory : IServiceFactory
{
public class ServiceFactory : IServiceFactory
private readonly Func<Type, object?> factory;
private readonly Func<Type, object?[], object> creator;
public ServiceFactory(Func<Type, object?> factory, Func<Type, object?[], object> creator)
{
private readonly Func<Type, object?> factory;
private readonly Func<Type, object?[], object> creator;
public ServiceFactory(Func<Type, object?> factory, Func<Type, object?[], object> creator)
{
this.factory = factory;
this.creator = creator;
}
public object? Create(Type type, params object?[] parameters)
{
dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type));
return lookup is not null ? lookup.Create(creator, parameters) : creator(type, parameters);
}
public T? Create<T>(Type type, params object?[] parameters)
{
dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type));
return lookup is not null ? (T)lookup.Create(creator, parameters) : (T)creator(type, parameters);
}
this.factory = factory;
this.creator = creator;
}
}
public object? Create(Type type, params object?[] parameters)
{
dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type));
return lookup is not null ? lookup.Create(creator, parameters) : creator(type, parameters);
}
public T? Create<T>(Type type, params object?[] parameters)
{
dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type));
return lookup is not null ? (T)lookup.Create(creator, parameters) : (T)creator(type, parameters);
}
}
@@ -1,25 +1,24 @@
using System.Reflection;
namespace Toolkit.Foundation
namespace Toolkit.Framework.Foundation;
internal class ServiceFactoryDescriptor
{
internal class ServiceFactoryDescriptor
private readonly IServiceFactory serviceFactory;
public ServiceFactoryDescriptor(IServiceFactory serviceFactory)
{
private readonly IServiceFactory serviceFactory;
public ServiceFactoryDescriptor(IServiceFactory serviceFactory)
{
this.serviceFactory = serviceFactory;
}
public object? Create(Type type)
{
MethodInfo? methodInfo = typeof(ServiceFactoryDescriptor).GetMethod(nameof(Create), BindingFlags.NonPublic | BindingFlags.Instance);
return methodInfo?.MakeGenericMethod(type).Invoke(this, new object[] { type });
}
private T Create<T>(Type type)
{
return serviceFactory.Create<T>(type);
}
this.serviceFactory = serviceFactory;
}
}
public object? Create(Type type)
{
MethodInfo? methodInfo = typeof(ServiceFactoryDescriptor).GetMethod(nameof(Create), BindingFlags.NonPublic | BindingFlags.Instance);
return methodInfo?.MakeGenericMethod(type).Invoke(this, new object[] { type });
}
private T? Create<T>(Type type)
{
return serviceFactory.Create<T>(type);
}
}