//[TestMethod] public void GenericResolverDemo() { InitializeGenericResolver(); var repository = GenericResolver <IRepository> .Resolve(); repository.Save("my item"); }
/// <summary> /// Resolves the generic values for a specified type. /// </summary> /// <param name="expectedTypes">Parameter types from method definition.</param> /// <param name="actualTypes">Argument types from method invocation site. </param> /// <param name="genericDefs">Generic parameters from method definition.</param> /// <param name="hints">Extra hints that are specified explicitly.</param> /// <param name="lambdaResolver"> /// Callback for Lambda`T resolution. /// Passed arguments are: /// 1. Lambda's position in the argument list (to find a corresponding NodeBase) /// 2. Already resolved list of types /// Return value is the inferred type of lambda return. /// </param> public static Type[] ResolveMethodGenericsByArgs(Type[] expectedTypes, Type[] actualTypes, Type[] genericDefs, Type[] hints = null, LambdaResolver lambdaResolver = null) { if (hints != null && hints.Length != genericDefs.Length) { throw new ArgumentException("hints"); } var resolver = new GenericResolver(genericDefs, hints, lambdaResolver); return(resolver.Resolve(expectedTypes, actualTypes)); }
/// <summary> /// Resolves the generic values for a specified type. /// </summary> /// <param name="expectedTypes">Parameter types from method definition.</param> /// <param name="actualTypes">Argument types from method invocation site. </param> /// <param name="genericDefs">Generic parameters from method definition.</param> /// <param name="hints">Extra hints that are specified explicitly.</param> /// <param name="lambdaResolver"> /// Callback for Lambda`T resolution. /// Passed arguments are: /// 1. Lambda's position in the argument list (to find a corresponding NodeBase) /// 2. Already resolved list of types /// Return value is the inferred type of lambda return. /// </param> /// <returns></returns> public static Type[] ResolveMethodGenericsByArgs(Type[] expectedTypes, Type[] actualTypes, Type[] genericDefs, Type[] hints = null, LambdaResolver lambdaResolver = null) { if(hints != null && hints.Length != genericDefs.Length) throw new ArgumentException("hints"); var resolver = new GenericResolver(genericDefs, hints, lambdaResolver); return resolver.Resolve(expectedTypes, actualTypes); }
public void InitializeGenericResolver() { GenericResolver <ICustomDbContext> .SetResolver(() => new CustomDbContext()); GenericResolver <IRepository> .SetResolver(() => GenericResolver <Repository> .Resolve()); }