static void Main(string[] args) { //创建一个容器 IServiceContainer services = new ServiceContainer(); services.Configure(config => { config.Interceptors.AddTyped <SampleInterceptor>(); }); services.AddType <ISampleService, SampleService>(); services.AddType <ISampleRepository, SampleRepository>(); //使用类型注册服务 services.AddType <ILogger, Logger>(); //使用实例注册服务,服务的生命周期限定为单例 services.AddInstance <ITaskService>(new TaskService()); //使用委托工厂注册服务 services.AddDelegate <ITaskService, TaskService>(resolver => new TaskService()); //创建服务解析器 IServiceResolver serviceResolver = services.Build(); //解析单个服务 ISampleService sampleService = serviceResolver.Resolve <ISampleService>(); //解析单个服务,并且验证是否为null,为null则抛出异常 ISampleService sampleServiceRequired = serviceResolver.ResolveRequired <ISampleService>(); //解析服务集合,如果未注册,则为空集合 IEnumerable <ISampleService> sampleServices = serviceResolver.ResolveMany <ISampleService>(); }
public object Invoke(IServiceResolver resolver, object instance, ServiceDefinition service) { if (instance == null || instance is IConfiguration) { return(instance); } var instanceType = instance.GetType(); var configuration = resolver.ResolveRequired <IConfiguration>(); foreach (var field in instanceType.GetFields(_flags)) { var reflector = field.GetReflector(); var configurationMetadata = reflector.GetCustomAttribute <ConfigurationMetadataAttribute>(); if (configurationMetadata == null) { continue; } var section = configurationMetadata.GetSection(); if (configurationMetadata.Type == ConfigurationBindType.Value) { var key = section == null ? configurationMetadata.Key : section + ":" + configurationMetadata.Key; reflector.SetValue(instance, configuration.GetValue(field.FieldType, key)); } else { var configurationSection = section == null ? configuration : configuration.GetSection(section); reflector.SetValue(instance, configurationSection.Get(field.FieldType)); } } return(instance); }
internal static void AllDone(ILogServiceCollection services) { if (services is ConsoleLogServiceCollection loggingServices) { using (loggingServices) { loggingServices.ActiveConsolePreferencesRenderers(); loggingServices.RegisterCoreComponents(); loggingServices.BuildAndActiveConfiguration(); loggingServices.AddTraceIdGenerator(); } ServiceResolver = loggingServices.OriginalServices.ToServiceContext().Build(); loggingServices.ActiveLogEventEnrichers(); StaticServiceResolver.SetResolver(ServiceResolver.ResolveRequired <ILoggingServiceProvider>()); } else { throw new ArgumentException(nameof(services)); } }
public object GetRequiredService(Type serviceType) { if (serviceType == null) { throw new ArgumentNullException(nameof(serviceType)); } return(_serviceResolver.ResolveRequired(serviceType)); }
public static T ResolveRequired <T>(this IServiceResolver serviceResolver) { if (serviceResolver == null) { throw new ArgumentNullException(nameof(serviceResolver)); } return((T)serviceResolver.ResolveRequired(typeof(T))); }
public static IEnumerable <T> ResolveMany <T>(this IServiceResolver serviceResolver) { if (serviceResolver == null) { throw new ArgumentNullException(nameof(serviceResolver)); } return(serviceResolver.ResolveRequired <IManyEnumerable <T> >()); }
public static IEnumerable <object> ResolveMany(this IServiceResolver serviceResolver, Type serviceType) { if (serviceResolver == null) { throw new ArgumentNullException(nameof(serviceResolver)); } if (serviceType == null) { throw new ArgumentNullException(nameof(serviceType)); } var genericEnumerable = typeof(IManyEnumerable <>).MakeGenericType(serviceType); return((IManyEnumerable <object>)serviceResolver.ResolveRequired(genericEnumerable)); }
internal static void AllDone(ILogServiceCollection services) { if (services is ConsoleLogServiceCollection servicesImpl) { servicesImpl.BuildConfiguration(); servicesImpl.ActiveSinkSettings(); servicesImpl.ActiveOriginConfiguration(); servicesImpl.AddDependency(s => s.TryAdd(ServiceDescriptor.Singleton(Options.Create((LoggingOptions)servicesImpl.ExposeLogSettings())))); servicesImpl.AddDependency(s => s.TryAdd(ServiceDescriptor.Singleton(servicesImpl.ExposeLoggingConfiguration()))); ServiceResolver = servicesImpl.ExposeServices().ToServiceContainer().Build(); StaticServiceResolver.SetResolver(ServiceResolver.ResolveRequired <ILoggingServiceProvider>()); } else { throw new ArgumentException(nameof(services)); } }
public DisposedProxyGenerator(IServiceResolver serviceResolver) { _serviceResolver = serviceResolver; _proxyGenerator = serviceResolver.ResolveRequired <IProxyGenerator>(); }
/// <inheritdoc /> public object RequiredResolve(Type serviceType) => _resolver.ResolveRequired(serviceType);