From 6d3193045ef3da0db356a057c525205be8e42f97 Mon Sep 17 00:00:00 2001 From: usausa Date: Thu, 25 Jan 2018 14:13:10 +0900 Subject: [PATCH] Update to support new smart reflection api --- Smart.Resolver.AspNetCore.nuspec | 6 +- .../Resolver/SmartResolverServiceProvider.cs | 13 ++- .../Smart.Resolver.AspNetCore.csproj | 2 +- .../Smart.Resolver.Tests.csproj | 2 +- Smart.Resolver.Xamarin.nuspec | 6 +- .../Smart.Resolver.Xamarin.csproj | 2 +- Smart.Resolver.nuspec | 4 +- Smart.Resolver/Resolver/FactoryBuilder.cs | 101 +++++++++--------- .../Resolver/Injectors/PropertyInjector.cs | 6 +- .../Resolver/Metadatas/MetadataFactory.cs | 14 ++- .../Resolver/Metadatas/PropertyMetadata.cs | 15 ++- .../Resolver/Providers/StandardProvider.cs | 29 +++-- Smart.Resolver/Resolver/ResolverConfig.cs | 4 +- Smart.Resolver/Smart.Resolver.csproj | 2 +- 14 files changed, 111 insertions(+), 95 deletions(-) diff --git a/Smart.Resolver.AspNetCore.nuspec b/Smart.Resolver.AspNetCore.nuspec index c14413c..f605f88 100644 --- a/Smart.Resolver.AspNetCore.nuspec +++ b/Smart.Resolver.AspNetCore.nuspec @@ -2,7 +2,7 @@ Usa.Smart.Resolver.AspNetCore - 1.7.0-beta1 + 1.7.0-beta2 Smart.Resolver.AspNetCore .NET machi_pon machi_pon @@ -14,8 +14,8 @@ false - - + + smart ioc di dependencyinjection aspnet aspnetcore diff --git a/Smart.Resolver.AspNetCore/Resolver/SmartResolverServiceProvider.cs b/Smart.Resolver.AspNetCore/Resolver/SmartResolverServiceProvider.cs index 13aa1e1..d60aa47 100644 --- a/Smart.Resolver.AspNetCore/Resolver/SmartResolverServiceProvider.cs +++ b/Smart.Resolver.AspNetCore/Resolver/SmartResolverServiceProvider.cs @@ -2,6 +2,7 @@ { using System; using System.Collections.Generic; + using System.Linq; public sealed class SmartResolverServiceProvider : IServiceProvider { @@ -22,10 +23,20 @@ public object GetService(Type serviceType) { if (serviceType.IsGenericType && serviceType.GetGenericTypeDefinition() == EnumerableType) { - return resolver.GetAll(serviceType.GenericTypeArguments[0], null); + // TODO + var type = serviceType.GenericTypeArguments[0]; + return ConvertArray(type, resolver.GetAll(type, null)); } return resolver.Get(serviceType); } + + public static Array ConvertArray(Type elementType, IEnumerable source) + { + var sourceArray = source.ToArray(); + var array = Array.CreateInstance(elementType, sourceArray.Length); + Array.Copy(sourceArray, 0, array, 0, sourceArray.Length); + return array; + } } } diff --git a/Smart.Resolver.AspNetCore/Smart.Resolver.AspNetCore.csproj b/Smart.Resolver.AspNetCore/Smart.Resolver.AspNetCore.csproj index dd21015..c60d03e 100644 --- a/Smart.Resolver.AspNetCore/Smart.Resolver.AspNetCore.csproj +++ b/Smart.Resolver.AspNetCore/Smart.Resolver.AspNetCore.csproj @@ -16,7 +16,7 @@ - + diff --git a/Smart.Resolver.Tests/Smart.Resolver.Tests.csproj b/Smart.Resolver.Tests/Smart.Resolver.Tests.csproj index f25b7aa..6ca3bde 100644 --- a/Smart.Resolver.Tests/Smart.Resolver.Tests.csproj +++ b/Smart.Resolver.Tests/Smart.Resolver.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/Smart.Resolver.Xamarin.nuspec b/Smart.Resolver.Xamarin.nuspec index 5db247c..b45ae30 100644 --- a/Smart.Resolver.Xamarin.nuspec +++ b/Smart.Resolver.Xamarin.nuspec @@ -2,7 +2,7 @@ Usa.Smart.Resolver.Xamarin - 1.7.0-beta1 + 1.7.0-beta2 Smart.Resolver.Xamarin .NET machi_pon machi_pon @@ -14,8 +14,8 @@ false - - + + smart ioc di dependencyinjection xamarin diff --git a/Smart.Resolver.Xamarin/Smart.Resolver.Xamarin.csproj b/Smart.Resolver.Xamarin/Smart.Resolver.Xamarin.csproj index a27edae..db1040d 100644 --- a/Smart.Resolver.Xamarin/Smart.Resolver.Xamarin.csproj +++ b/Smart.Resolver.Xamarin/Smart.Resolver.Xamarin.csproj @@ -16,7 +16,7 @@ - + NU1701 diff --git a/Smart.Resolver.nuspec b/Smart.Resolver.nuspec index e6c8140..824fdff 100644 --- a/Smart.Resolver.nuspec +++ b/Smart.Resolver.nuspec @@ -2,7 +2,7 @@ Usa.Smart.Resolver - 1.7.0-beta1 + 1.7.0-beta2 Smart.Resolver .NET machi_pon machi_pon @@ -14,7 +14,7 @@ false - + diff --git a/Smart.Resolver/Resolver/FactoryBuilder.cs b/Smart.Resolver/Resolver/FactoryBuilder.cs index fb537dd..c491e95 100644 --- a/Smart.Resolver/Resolver/FactoryBuilder.cs +++ b/Smart.Resolver/Resolver/FactoryBuilder.cs @@ -2,7 +2,6 @@ { using System; - using Smart.Reflection; using Smart.Resolver.Parameters; public static class FactoryBuilder @@ -22,11 +21,11 @@ public static Func Parameter(IKernel kernel, IParameter parameter) return () => parameter.Resolve(kernel); } - public static Func Array(IArrayOperator arrayOperator, Func[] objectFactories) + public static Func Array(Func arrayAllocator, Func[] objectFactories) { return () => { - var array = arrayOperator.Create(objectFactories.Length); + var array = arrayAllocator(objectFactories.Length); var objs = (object[])array; for (var i = 0; i < objectFactories.Length; i++) { @@ -39,24 +38,24 @@ public static Func Array(IArrayOperator arrayOperator, Func[] ob public static Func Activator0( Action processor, - IActivator0 activator) + Func activator) { if (processor != null) { return () => { - var instance = activator.Create(); + var instance = activator(); processor(instance); return instance; }; } - return activator.Create; + return activator; } public static Func Activator1( Action processor, - IActivator1 activator, + Func activator, Func[] argumentFactories) { if (processor != null) @@ -74,27 +73,27 @@ public static Func Activator1( private static Func Activator1WithProcess( Action processor, - IActivator1 activator, + Func activator, Func f1) { return () => { - var instance = activator.Create(f1()); + var instance = activator(f1()); processor(instance); return instance; }; } private static Func Activator1WithoutProcess( - IActivator1 activator, + Func activator, Func f1) { - return () => activator.Create(f1()); + return () => activator(f1()); } public static Func Activator2( Action processor, - IActivator2 activator, + Func activator, Func[] argumentFactories) { if (processor != null) @@ -114,29 +113,29 @@ public static Func Activator2( private static Func Activator2WithProcess( Action processor, - IActivator2 activator, + Func activator, Func f1, Func f2) { return () => { - var instance = activator.Create(f1(), f2()); + var instance = activator(f1(), f2()); processor(instance); return instance; }; } private static Func Activator2WithoutProcess( - IActivator2 activator, + Func activator, Func f1, Func f2) { - return () => activator.Create(f1(), f2()); + return () => activator(f1(), f2()); } public static Func Activator3( Action processor, - IActivator3 activator, + Func activator, Func[] argumentFactories) { if (processor != null) @@ -158,31 +157,31 @@ public static Func Activator3( private static Func Activator3WithProcess( Action processor, - IActivator3 activator, + Func activator, Func f1, Func f2, Func f3) { return () => { - var instance = activator.Create(f1(), f2(), f3()); + var instance = activator(f1(), f2(), f3()); processor(instance); return instance; }; } private static Func Activator3WithoutProcess( - IActivator3 activator, + Func activator, Func f1, Func f2, Func f3) { - return () => activator.Create(f1(), f2(), f3()); + return () => activator(f1(), f2(), f3()); } public static Func Activator4( Action processor, - IActivator4 activator, + Func activator, Func[] argumentFactories) { if (processor != null) @@ -206,7 +205,7 @@ public static Func Activator4( private static Func Activator4WithProcess( Action processor, - IActivator4 activator, + Func activator, Func f1, Func f2, Func f3, @@ -214,25 +213,25 @@ private static Func Activator4WithProcess( { return () => { - var instance = activator.Create(f1(), f2(), f3(), f4()); + var instance = activator(f1(), f2(), f3(), f4()); processor(instance); return instance; }; } private static Func Activator4WithoutProcess( - IActivator4 activator, + Func activator, Func f1, Func f2, Func f3, Func f4) { - return () => activator.Create(f1(), f2(), f3(), f4()); + return () => activator(f1(), f2(), f3(), f4()); } public static Func Activator5( Action processor, - IActivator5 activator, + Func activator, Func[] argumentFactories) { if (processor != null) @@ -258,7 +257,7 @@ public static Func Activator5( private static Func Activator5WithProcess( Action processor, - IActivator5 activator, + Func activator, Func f1, Func f2, Func f3, @@ -267,26 +266,26 @@ private static Func Activator5WithProcess( { return () => { - var instance = activator.Create(f1(), f2(), f3(), f4(), f5()); + var instance = activator(f1(), f2(), f3(), f4(), f5()); processor(instance); return instance; }; } private static Func Activator5WithoutProcess( - IActivator5 activator, + Func activator, Func f1, Func f2, Func f3, Func f4, Func f5) { - return () => activator.Create(f1(), f2(), f3(), f4(), f5()); + return () => activator(f1(), f2(), f3(), f4(), f5()); } public static Func Activator6( Action processor, - IActivator6 activator, + Func activator, Func[] argumentFactories) { if (processor != null) @@ -314,7 +313,7 @@ public static Func Activator6( private static Func Activator6WithProcess( Action processor, - IActivator6 activator, + Func activator, Func f1, Func f2, Func f3, @@ -324,14 +323,14 @@ private static Func Activator6WithProcess( { return () => { - var instance = activator.Create(f1(), f2(), f3(), f4(), f5(), f6()); + var instance = activator(f1(), f2(), f3(), f4(), f5(), f6()); processor(instance); return instance; }; } private static Func Activator6WithoutProcess( - IActivator6 activator, + Func activator, Func f1, Func f2, Func f3, @@ -339,12 +338,12 @@ private static Func Activator6WithoutProcess( Func f5, Func f6) { - return () => activator.Create(f1(), f2(), f3(), f4(), f5(), f6()); + return () => activator(f1(), f2(), f3(), f4(), f5(), f6()); } public static Func Activator7( Action processor, - IActivator7 activator, + Func activator, Func[] argumentFactories) { if (processor != null) @@ -374,7 +373,7 @@ public static Func Activator7( private static Func Activator7WithProcess( Action processor, - IActivator7 activator, + Func activator, Func f1, Func f2, Func f3, @@ -385,14 +384,14 @@ private static Func Activator7WithProcess( { return () => { - var instance = activator.Create(f1(), f2(), f3(), f4(), f5(), f6(), f7()); + var instance = activator(f1(), f2(), f3(), f4(), f5(), f6(), f7()); processor(instance); return instance; }; } private static Func Activator7WithoutProcess( - IActivator7 activator, + Func activator, Func f1, Func f2, Func f3, @@ -401,12 +400,12 @@ private static Func Activator7WithoutProcess( Func f6, Func f7) { - return () => activator.Create(f1(), f2(), f3(), f4(), f5(), f6(), f7()); + return () => activator(f1(), f2(), f3(), f4(), f5(), f6(), f7()); } public static Func Activator8( Action processor, - IActivator8 activator, + Func activator, Func[] argumentFactories) { if (processor != null) @@ -438,7 +437,7 @@ public static Func Activator8( private static Func Activator8WithProcess( Action processor, - IActivator8 activator, + Func activator, Func f1, Func f2, Func f3, @@ -450,14 +449,14 @@ private static Func Activator8WithProcess( { return () => { - var instance = activator.Create(f1(), f2(), f3(), f4(), f5(), f6(), f7(), f8()); + var instance = activator(f1(), f2(), f3(), f4(), f5(), f6(), f7(), f8()); processor(instance); return instance; }; } private static Func Activator8WithoutProcess( - IActivator8 activator, + Func activator, Func f1, Func f2, Func f3, @@ -467,12 +466,12 @@ private static Func Activator8WithoutProcess( Func f7, Func f8) { - return () => activator.Create(f1(), f2(), f3(), f4(), f5(), f6(), f7(), f8()); + return () => activator(f1(), f2(), f3(), f4(), f5(), f6(), f7(), f8()); } public static Func Activator( Action processor, - IActivator activator, + Func activator, Func[] argumentFactories) { return processor != null @@ -482,7 +481,7 @@ public static Func Activator( private static Func ActivatorWithProcess( Action processor, - IActivator activator, + Func activator, Func[] argumentFactories) { return () => @@ -493,14 +492,14 @@ private static Func ActivatorWithProcess( arguments[i] = argumentFactories[i](); } - var instance = activator.Create(arguments); + var instance = activator(arguments); processor(instance); return instance; }; } private static Func ActivatorWithoutProcess( - IActivator activator, + Func activator, Func[] argumentFactories) { return () => @@ -511,7 +510,7 @@ private static Func ActivatorWithoutProcess( arguments[i] = argumentFactories[i](); } - return activator.Create(arguments); + return activator(arguments); }; } } diff --git a/Smart.Resolver/Resolver/Injectors/PropertyInjector.cs b/Smart.Resolver/Resolver/Injectors/PropertyInjector.cs index 010c52f..701ecae 100644 --- a/Smart.Resolver/Resolver/Injectors/PropertyInjector.cs +++ b/Smart.Resolver/Resolver/Injectors/PropertyInjector.cs @@ -28,10 +28,10 @@ public void Inject(IKernel kernel, IBinding binding, TypeMetadata metadata, obje for (var i = 0; i < metadata.TargetProperties.Length; i++) { var property = metadata.TargetProperties[i]; - var parameter = binding.PropertyValues.GetParameter(property.Accessor.Name); - property.Accessor.SetValue( + var parameter = binding.PropertyValues.GetParameter(property.Name); + property.Setter( instance, - parameter != null ? parameter.Resolve(kernel) : kernel.Get(property.Accessor.Type, property.Constraint)); + parameter != null ? parameter.Resolve(kernel) : kernel.Get(property.PropertyType, property.Constraint)); } } } diff --git a/Smart.Resolver/Resolver/Metadatas/MetadataFactory.cs b/Smart.Resolver/Resolver/Metadatas/MetadataFactory.cs index 7d0a43b..755a13e 100644 --- a/Smart.Resolver/Resolver/Metadatas/MetadataFactory.cs +++ b/Smart.Resolver/Resolver/Metadatas/MetadataFactory.cs @@ -23,17 +23,17 @@ public sealed class MetadataFactory : IMetadataFactory private static readonly Type ListType = typeof(IList<>); - private readonly IAccessorFactory accessorFactory; + private readonly IDelegateFactory delegateFactory; private readonly ConcurrentDictionary metadatas = new ConcurrentDictionary(); /// /// /// - /// - public MetadataFactory(IAccessorFactory accessorFactory) + /// + public MetadataFactory(IDelegateFactory delegateFactory) { - this.accessorFactory = accessorFactory; + this.delegateFactory = delegateFactory; } /// @@ -120,7 +120,11 @@ private static ParameterMetadata CreateParameterMetadata(ParameterInfo pi) /// private PropertyMetadata CreatePropertyMetadata(PropertyInfo pi) { - return new PropertyMetadata(accessorFactory.CreateAccessor(pi), CreateConstraint(pi.GetCustomAttributes())); + return new PropertyMetadata( + pi.Name, + delegateFactory.GetExtendedPropertyType(pi), + delegateFactory.CreateSetter(pi, true), + CreateConstraint(pi.GetCustomAttributes())); } /// diff --git a/Smart.Resolver/Resolver/Metadatas/PropertyMetadata.cs b/Smart.Resolver/Resolver/Metadatas/PropertyMetadata.cs index 10a43c1..6b88cec 100644 --- a/Smart.Resolver/Resolver/Metadatas/PropertyMetadata.cs +++ b/Smart.Resolver/Resolver/Metadatas/PropertyMetadata.cs @@ -1,6 +1,7 @@ namespace Smart.Resolver.Metadatas { - using Smart.Reflection; + using System; + using Smart.Resolver.Constraints; /// @@ -8,13 +9,19 @@ /// public class PropertyMetadata { - public IAccessor Accessor { get; } + public string Name { get; } + + public Type PropertyType { get; } + + public Action Setter { get; } public IConstraint Constraint { get; } - public PropertyMetadata(IAccessor accessor, IConstraint constraint) + public PropertyMetadata(string name, Type propertyType, Action setter, IConstraint constraint) { - Accessor = accessor; + Name = name; + PropertyType = propertyType; + Setter = setter; Constraint = constraint; } } diff --git a/Smart.Resolver/Resolver/Providers/StandardProvider.cs b/Smart.Resolver/Resolver/Providers/StandardProvider.cs index dc5ce0b..566e976 100644 --- a/Smart.Resolver/Resolver/Providers/StandardProvider.cs +++ b/Smart.Resolver/Resolver/Providers/StandardProvider.cs @@ -20,9 +20,7 @@ public sealed class StandardProvider : IProvider private readonly IProcessor[] processors; - private readonly IActivatorFactory activatorFactory; - - private readonly IArrayOperatorFactory arrayOperatorFactory; + private readonly IDelegateFactory delegateFactory; private readonly TypeMetadata metadata; @@ -51,8 +49,7 @@ public StandardProvider(Type type, IComponentContainer components) TargetType = type; injectors = components.GetAll().ToArray(); processors = components.GetAll().ToArray(); - activatorFactory = components.Get(); - arrayOperatorFactory = components.Get(); + delegateFactory = components.Get(); metadata = components.Get().GetMetadata(TargetType); } @@ -84,52 +81,52 @@ public Func CreateFactory(IKernel kernel, IBinding binding) case 0: return FactoryBuilder.Activator0( processor, - activatorFactory.CreateActivator(constructor.Constructor)); + delegateFactory.CreateFactory0(constructor.Constructor)); case 1: return FactoryBuilder.Activator1( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory1(constructor.Constructor), argumentFactories); case 2: return FactoryBuilder.Activator2( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory2(constructor.Constructor), argumentFactories); case 3: return FactoryBuilder.Activator3( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory3(constructor.Constructor), argumentFactories); case 4: return FactoryBuilder.Activator4( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory4(constructor.Constructor), argumentFactories); case 5: return FactoryBuilder.Activator5( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory5(constructor.Constructor), argumentFactories); case 6: return FactoryBuilder.Activator6( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory6(constructor.Constructor), argumentFactories); case 7: return FactoryBuilder.Activator7( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory7(constructor.Constructor), argumentFactories); case 8: return FactoryBuilder.Activator8( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory8(constructor.Constructor), argumentFactories); } return FactoryBuilder.Activator( processor, - activatorFactory.CreateActivator(constructor.Constructor), + delegateFactory.CreateFactory(constructor.Constructor), argumentFactories); } @@ -225,7 +222,7 @@ private Func[] ResolveArgumentsFactories(IKernel kernel, IBinding bindin if (parameter.ElementType != null) { argumentFactories[i] = FactoryBuilder.Array( - arrayOperatorFactory.CreateArrayOperator(parameter.ElementType), + delegateFactory.CreateArrayAllocator(parameter.ElementType), kernel.ResolveAllFactory(parameter.ElementType, constructor.Constraints[i]).ToArray()); continue; } diff --git a/Smart.Resolver/Resolver/ResolverConfig.cs b/Smart.Resolver/Resolver/ResolverConfig.cs index 3b754eb..c68330f 100644 --- a/Smart.Resolver/Resolver/ResolverConfig.cs +++ b/Smart.Resolver/Resolver/ResolverConfig.cs @@ -25,9 +25,7 @@ public class ResolverConfig : IResolverConfig, IBindingRoot /// public ResolverConfig() { - Components.Add(TypeMetadataFactory.Default); - Components.Add(TypeMetadataFactory.Default); - Components.Add(TypeMetadataFactory.Default); + Components.Add(DelegateFactory.Default); Components.Add(); Components.Add(); } diff --git a/Smart.Resolver/Smart.Resolver.csproj b/Smart.Resolver/Smart.Resolver.csproj index 8b26b9c..1b1ff07 100644 --- a/Smart.Resolver/Smart.Resolver.csproj +++ b/Smart.Resolver/Smart.Resolver.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file