private Func <ILifeScope, object> MakeSingleton(IFactoryExpression factoryExpression) { var lifeScope = _singletonLifeScope.CreateNestedScope(); Func <object> singletonFactory = () => factoryExpression.Compile <object>().Invoke(lifeScope); var singleton = new LazyWithoutExceptionCaching <object>(singletonFactory); return(transientLifeScope => singleton.Value); }
private void Register(IFactoryExpression factoryExpression, IEnumerable <Type> serviceTypes) { foreach (var serviceType in serviceTypes) { AssertServiceIsNotDisposable(serviceType); _factories.AddFactory(serviceType, factoryExpression); } }
private void RegisterSingleton( IFactoryExpression factoryExpression, Type implementationType, IEnumerable <Type> serviceTypes) { var singleton = _singletonFactory.MakeSingleton(factoryExpression, implementationType); Register(singleton, serviceTypes); }
public IFactoryExpression MakeSingleton(IFactoryExpression factoryExpression, Type constructedType) { var singletonFactoryExpression = MakeSingleton(factoryExpression); return(new CompiledFactoryExpression(singletonFactoryExpression, constructedType)); }
public bool TryGetFactory(Type constructedType, out IFactoryExpression factoryExpression) { return(_factories.TryGetValue(constructedType, out factoryExpression)); }
public void AddFactory(Type serviceType, IFactoryExpression factoryExpression) { Add(_factories, serviceType, factoryExpression); }