Add some initial navigation route handlers
This commit is contained in:
@@ -1,9 +1,17 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Mediator;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
|
||||
namespace Toolkit.Foundation
|
||||
{
|
||||
public static class IServiceCollectionExtensions
|
||||
{
|
||||
public static IServiceCollection AddHandler<TRequestHandler>(this IServiceCollection serviceCollection)
|
||||
{
|
||||
serviceCollection.TryAdd(new ServiceDescriptor(typeof(TRequestHandler), typeof(TRequestHandler), ServiceLifetime.Transient));
|
||||
return serviceCollection;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddFoundation(this IServiceCollection serviceCollection)
|
||||
{
|
||||
serviceCollection.AddSingleton<IServiceFactory>(provider => new ServiceFactory(provider.GetService, (instanceType, parameters) => ActivatorUtilities.CreateInstance(provider, instanceType, parameters!)));
|
||||
|
||||
@@ -2,12 +2,7 @@
|
||||
{
|
||||
public static class IServiceFactoryExtensions
|
||||
{
|
||||
public static T? Get<T>(this IServiceFactory serviceFactory)
|
||||
{
|
||||
return serviceFactory.Get<T>(typeof(T));
|
||||
}
|
||||
|
||||
public static T Create<T>(this IServiceFactory serviceFactory, params object?[] parameters)
|
||||
public static T? Create<T>(this IServiceFactory serviceFactory, params object?[] parameters)
|
||||
{
|
||||
return serviceFactory.Create<T>(typeof(T), parameters);
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
namespace Toolkit.Foundation
|
||||
{
|
||||
public interface INavigationRouter : IInitializer
|
||||
{
|
||||
void Navigate(Navigate args);
|
||||
|
||||
void Register(string name, object route);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
namespace Toolkit.Foundation
|
||||
using Mediator;
|
||||
|
||||
namespace Toolkit.Foundation
|
||||
{
|
||||
public record Navigate
|
||||
public record Navigate : IRequest
|
||||
{
|
||||
public Navigate(string name, params object?[] parameters)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
namespace Toolkit.Foundation
|
||||
using Mediator;
|
||||
|
||||
namespace Toolkit.Foundation
|
||||
{
|
||||
public record NavigateBack(object Route);
|
||||
public record NavigateBack(object Route) : IRequest;
|
||||
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
|
||||
namespace Toolkit.Foundation
|
||||
{
|
||||
//public class NavigateHandler : IRecipient<Navigate>
|
||||
//{
|
||||
// private readonly IMessenger messenger;
|
||||
|
||||
// public NavigateHandler(IMessenger messenger)
|
||||
// {
|
||||
// this.messenger = messenger;
|
||||
// }
|
||||
|
||||
// public void Receive(Navigate request)
|
||||
// {
|
||||
// messenger.Send(request);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
using Mediator;
|
||||
|
||||
namespace Toolkit.Foundation
|
||||
{
|
||||
public record NavigationRoute(string Name, object Route) : IRequest;
|
||||
}
|
||||
@@ -2,8 +2,8 @@
|
||||
{
|
||||
public interface IServiceFactory
|
||||
{
|
||||
T? Get<T>(Type type);
|
||||
object? Create(Type type, params object?[] parameters);
|
||||
|
||||
T Create<T>(Type type, params object?[] parameters);
|
||||
T? Create<T>(Type type, params object?[] parameters);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace Toolkit.Foundation
|
||||
{
|
||||
public class ServiceCreator<T> : IServiceCreator<T>
|
||||
public class ServiceCreator<I, T> : IServiceCreator<I>
|
||||
{
|
||||
public virtual object Create(Func<Type, object[], object> creator, params object[] parameters)
|
||||
{
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
this.creator = creator;
|
||||
}
|
||||
|
||||
public T? Get<T>(Type type)
|
||||
public object? Create(Type type, params object?[] parameters)
|
||||
{
|
||||
T? value = (T?)factory(type);
|
||||
return value;
|
||||
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)
|
||||
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);
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor)
|
||||
{
|
||||
data = parameters is { Length: > 0 } ? serviceFactory.Create<object>(descriptor.DataType, parameters) : serviceFactory.Get<object>(descriptor.DataType);
|
||||
data = parameters is { Length: > 0 } ? serviceFactory.Create<object>(descriptor.DataType, parameters) : serviceFactory.Create(descriptor.DataType);
|
||||
if (data is ICache cache)
|
||||
{
|
||||
this.cache[name] = cache;
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
if (provider.Get(name) is ITemplateDescriptor descriptor)
|
||||
{
|
||||
view = serviceFactory.Get<object>(descriptor.TemplateType);
|
||||
view = serviceFactory.Create(descriptor.TemplateType);
|
||||
if (view is ICache cache)
|
||||
{
|
||||
this.cache[name] = cache;
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace Toolkit.Foundation
|
||||
|
||||
if (provider.Get(data.GetType()) is ITemplateDescriptor descriptor)
|
||||
{
|
||||
template = serviceFactory.Get<object>(descriptor.TemplateType);
|
||||
template = serviceFactory.Create(descriptor.TemplateType);
|
||||
if (template is ICache cache)
|
||||
{
|
||||
this.cache[data] = cache;
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
if (descriptors.FirstOrDefault(x => x.DataType == type) is ITemplateDescriptor descriptor)
|
||||
{
|
||||
data = parameters is { Length: > 0 } ? serviceFactory.Create<object>(descriptor.DataType, parameters) : serviceFactory.Get<object>(descriptor.DataType);
|
||||
data = parameters is { Length: > 0 } ? serviceFactory.Create<object>(descriptor.DataType, parameters) : serviceFactory.Create(descriptor.DataType);
|
||||
if (data is ICache cache)
|
||||
{
|
||||
this.cache[type] = cache;
|
||||
|
||||
Reference in New Issue
Block a user