コード例 #1
0
        public void AddRegistration(IRegistratedService registration)
        {
            ServiceInfo service = GetServiceInfo(registration.ServiceType);

            service.AddImplementation(registration);
            Registrations.Add(registration);
        }
コード例 #2
0
        private object CreateInstance(IRegistratedService registration)
        {
            var instance = registration.Activate(this);

            if (instance is IDisposable disposable)
            {
                _disposables.Add(disposable);
            }

            return(instance);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
 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));
         }
     }
 }
コード例 #5
0
 public bool TryGetRegistration(Type type, out IRegistratedService registration)
 {
     return(_serviceRegistry.TryGetRegistration(type, out registration));
 }
コード例 #6
0
        public bool TryGetImplementation(out IRegistratedService registration)
        {
            registration = _lastRegistered;

            return(registration != null);
        }
コード例 #7
0
 public void AddImplementation(IRegistratedService registration)
 {
     Implementations.Add(registration);
     _lastRegistered = registration;
 }