public void Register(TypeRegistration typeRegistration) { lock (_syncRoot) { _registrations.Add(typeRegistration); } }
public void RegisterSingle(TypeRegistration typeRegistration) { lock (_syncRoot) { var newRegistrations = _registrations.Where(x => x.RegistrationType != typeRegistration.RegistrationType).ToList(); newRegistrations.Add(typeRegistration); _registrations.Clear(); _registrations.AddRange(newRegistrations); } }
private object CreateInstanceFor(TypeRegistration typeRegistration) { EnsureTypeIsSafe(typeRegistration.ImplementationType); object Factory(TypeRegistration x) => Activator.CreateInstance(x.ImplementationType); var result = typeRegistration.Lifetime == Lifetime.Singleton ? _singletones.GetOrAdd(typeRegistration.RegistrationType, x => Factory(typeRegistration)) : Factory(typeRegistration); return(result); }