/// <summary> /// Register <paramref name="interfaceType"/> as an aggregate service. /// </summary> /// <param name="builder">The container builder.</param> /// <param name="interfaceType">The interface type to register.</param> /// <exception cref="ArgumentNullException">If <paramref name="interfaceType"/> is null.</exception> /// <exception cref="ArgumentException">If <paramref name="interfaceType"/> is not an interface.</exception> public static void RegisterAggregateService(this ContainerBuilder builder, Type interfaceType) { if (interfaceType == null) { throw new ArgumentNullException(nameof(interfaceType)); } if (!interfaceType.GetTypeInfo().IsInterface) { throw new ArgumentException(AggregateServicesResources.GetString("TypeMustBeInterface"), nameof(interfaceType)); } builder.Register(c => AggregateServiceGenerator.CreateInstance(interfaceType, c.Resolve <IComponentContext>())) .As(interfaceType) .InstancePerDependency(); }
/// <summary> /// Generate an aggregate service instance that will resolve its types from <paramref name="context"/>. /// </summary> /// <param name="context">The component context from where types will be resolved.</param> /// <param name="interfaceType">The interface type for the aggregate service.</param> /// <returns>The aggregate service instance.</returns> /// <exception cref="ArgumentException">Thrown if <paramref name="interfaceType"/> is not an interface.</exception> public static object CreateInstance(Type interfaceType, IComponentContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (interfaceType == null) { throw new ArgumentNullException(nameof(interfaceType)); } if (!interfaceType.GetTypeInfo().IsInterface) { throw new ArgumentException(AggregateServicesResources.GetString("TypeMustBeInterface"), nameof(interfaceType)); } var resolverInterceptor = new ResolvingInterceptor(interfaceType, context); return(Generator.CreateInterfaceProxyWithoutTarget(interfaceType, resolverInterceptor)); }