public static IBindingWithOrOnSyntax <TImplementation> AsService <TImplementation>( this IBindingWithSyntax <TImplementation> syntax) { Type serviceType = null; if (typeof(TImplementation).IsClass && !typeof(TImplementation).IsAbstract) { if (serviceType == null) { foreach (var interfaceType in typeof(TImplementation).GetInterfaces()) { var bindings = syntax.Kernel.GetBindings(interfaceType).ToList(); foreach (var binding in bindings) { if (ReferenceEquals(binding.BindingConfiguration, syntax.BindingConfiguration)) { serviceType = interfaceType; break; } } if (interfaceType != null) { break; } } } if (serviceType == null) { if (typeof(TImplementation).BaseType.IsAbstract) { var bindings = syntax.Kernel.GetBindings(typeof(TImplementation).BaseType).ToList(); foreach (var binding in bindings) { if (ReferenceEquals(binding.BindingConfiguration, syntax.BindingConfiguration)) { serviceType = typeof(TImplementation).BaseType; break; } } } } } if (serviceType == null) { throw new Exception(); } var serviceBinding = new ServiceBindingInfo { ServiceType = serviceType, ImplementationType = typeof(TImplementation) }; syntax.Kernel.Bind <ServiceBindingInfo>().ToConstant(serviceBinding); return(syntax.WithMetadata(nameof(ServiceBindingInfo), serviceBinding)); }
public static IBindingWithOrOnSyntax <TService> ToExtrnalService <TService>(this IBindingToSyntax <TService> syntax) { var serviceBinding = new ServiceBindingInfo { ServiceType = typeof(TService), IsExternal = true }; syntax.Kernel.Bind <ServiceBindingInfo>().ToConstant(serviceBinding); return(syntax.ToMethod(ThrowOnAttemptToResolve <TService>) .WithMetadata(nameof(ServiceBindingInfo), serviceBinding)); }
public static void AsExternalService <TLimit, TActivatorData, TRegistrationStyle>( this IRegistrationBuilder <TLimit, TActivatorData, TRegistrationStyle> builder) where TActivatorData : IConcreteActivatorData where TRegistrationStyle : SingleRegistrationStyle { var registration = RegistrationBuilder.CreateRegistration(builder); var serviceType = (registration.Services.FirstOrDefault() as TypedService)?.ServiceType; if (serviceType != null) { var serviceBinding = new ServiceBindingInfo { ServiceType = serviceType, IsExternal = true }; builder.SingleInstance(); builder.ExternallyOwned(); builder.WithMetadata(nameof(ServiceBindingInfo), serviceBinding); } }