public void AddRegistration(IRegistratedService registration) { ServiceInfo service = GetServiceInfo(registration.ServiceType); service.AddImplementation(registration); Registrations.Add(registration); }
private object CreateInstance(IRegistratedService registration) { var instance = registration.Activate(this); if (instance is IDisposable disposable) { _disposables.Add(disposable); } return(instance); }
public bool TryGetRegistration(Type service, out IRegistratedService registration) { ServiceInfo serviceInfo; if (typeof(IEnumerable).IsAssignableFrom(service)) { serviceInfo = GetServiceInfo(service.GenericTypeArguments[0]); } else { serviceInfo = GetServiceInfo(service); } return(serviceInfo.TryGetImplementation(out registration)); }
private object GetOrCreateInstance(Type serviceType, IRegistratedService registration) { if (registration.Lifetime == ServiceLifetime.Singleton && ContainerId != RootContainer.ContainerId) { return(RootContainer.GetService(serviceType)); } if (TryGetSharedInstance(registration.Id, out var sharedInstance)) { return(sharedInstance); } else { if (registration.IsShared) { var instance = CreateInstance(registration); _sharedInstances.TryAdd(registration.Id, instance); return(instance); } else { return(CreateInstance(registration)); } } }
public bool TryGetRegistration(Type type, out IRegistratedService registration) { return(_serviceRegistry.TryGetRegistration(type, out registration)); }
public bool TryGetImplementation(out IRegistratedService registration) { registration = _lastRegistered; return(registration != null); }
public void AddImplementation(IRegistratedService registration) { Implementations.Add(registration); _lastRegistered = registration; }