/// <summary> /// Registers and binds service with a given type to objects of specified type, created later at runtime by specified handler. /// </summary> public RegisteredServiceContext Register <T>(ServiceMode mode, ServiceCreationHandler creationHandler, params object[] constructorArgs) { var id = typeof(T); if (creationHandler == null) { return(RegisterServiceObject(_typeServices, id, GetWrapper(id, mode, constructorArgs))); } return(RegisterServiceObject(_typeServices, id, GetWrapper(id, new[] { id }, creationHandler, mode, constructorArgs))); }
/// <summary> /// Init constructor. /// </summary> public ServiceDelegateCloneWrapper(IServiceProviderEx provider, object registeredServiceID, IEnumerable<Type> validators, ServiceCreationHandler serviceHandler, object[] serviceConstructorArgs) : base(provider) { if (serviceHandler == null) throw new ArgumentNullException("serviceHandler"); RegisteredServiceID = registeredServiceID; Validators = validators; ServiceHandler = serviceHandler; ServiceArgs = serviceConstructorArgs; }
/// <summary> /// Init constructor. /// </summary> public ServiceDelegateCloneWrapper(IServiceProviderEx provider, object registeredServiceID, IEnumerable <Type> validators, ServiceCreationHandler serviceHandler, object[] serviceConstructorArgs) : base(provider) { if (serviceHandler == null) { throw new ArgumentNullException("serviceHandler"); } RegisteredServiceID = registeredServiceID; Validators = validators; ServiceHandler = serviceHandler; ServiceArgs = serviceConstructorArgs; }
/// <summary> /// Registers and binds service with a given id to objects of specified type, created later at runtime by specified handler. /// </summary> public RegisteredServiceContext Register(string id, ServiceMode mode, ServiceCreationHandler creationHandler, params object[] constructorArgs) { if (id == null) { throw new ArgumentNullException("id"); } if (creationHandler == null) { throw new ArgumentNullException("creationHandler"); } return(RegisterServiceObject(_stringServices, id, GetWrapper(id, null, creationHandler, mode, constructorArgs))); }
public void FailToRegisterDynamicServiceViaHandler() { var s = new ServiceLocator(); ServiceCreationHandler h = (sender, e) => { e.Service = new SimpleService(); }; // fail to register service: s.Register(typeof(IUnknownService), ServiceMode.Singleton, h); // try to get a service, and an exception should be generated: var o = s.GetService <IUnknownService>(); Assert.IsNull(o); }
/// <summary> /// Init constructor. /// </summary> public ServiceDelegateWrapper(IServiceProviderEx provider, object registeredServiceID, IEnumerable <Type> validators, ServiceCreationHandler serviceHandler, object[] serviceConstructorArgs) : base(provider, registeredServiceID, validators, serviceHandler, serviceConstructorArgs) { }
/// <summary> /// Gets a wrapper dynamically creating/validating service via specified handler. /// </summary> private ServiceObjectWrapper GetWrapper(object id, IEnumerable <Type> validators, ServiceCreationHandler creationHandler, ServiceMode mode, object[] constructorArgs) { if (creationHandler == null) { return(null); } return(mode == ServiceMode.Singleton ? new ServiceDelegateWrapper(this, id, validators, creationHandler, constructorArgs) : new ServiceDelegateCloneWrapper(this, id, validators, creationHandler, constructorArgs)); }
/// <summary> /// Registers and binds service with a given id to objects of specified type, created later at runtime by specified handler. /// </summary> public RegisteredServiceContext Register(uint id, ServiceMode mode, ServiceCreationHandler creationHandler, params object[] constructorArgs) { return(RegisterServiceObject(_uintServices, id, GetWrapper(id, null, creationHandler, mode, constructorArgs))); }
/// <summary> /// Registers and binds service with a given id to objects of specified type, created later at runtime by specified handler. /// </summary> public RegisteredServiceContext Register(IEnumerable <Type> id, ServiceMode mode, ServiceCreationHandler creationHandler, params object[] constructorArgs) { if (id == null) { throw new ArgumentNullException("id"); } return(RegisterServiceObject(_typeServices, id, GetWrapper(id, id, creationHandler, mode, constructorArgs))); }