123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using System;
- namespace Wayne.Lib
- {
- /// <summary>
- /// Interface representing a service container. Dispose will dispose all disposable services.
- /// </summary>
- public interface IServiceContainer : IServiceLocator, IDisposable
- {
- /// <summary>
- /// Register an external resolver, if you want to hook up the container against another Ioc framework for example.
- /// </summary>
- /// <param name="requestedType"></param>
- void RegisterResolver(Func<Type, object> requestedType);
- /// <summary>
- /// Registers service of type TService in the container. A new instance of this type will be created by the container.
- /// </summary>
- /// <typeparam name="TService">Type of service.</typeparam>
- void RegisterService<TService>();
- /// <summary>
- /// Registers service of type TService in the container. A new instance of this type will be created by the container.
- /// </summary>
- /// <typeparam name="TService">Type of service.</typeparam>
- /// <param name="serviceId">A string to identfy this entry.</param>
- void RegisterService<TService>(string serviceId);
- /// <summary>
- /// Registers service of type TServiceContract in the container. An instance of TServiceImplementation will be created by the container and registerd as TServiceContract.
- /// </summary>
- /// <typeparam name="TServiceContract">Contract that should be registered in the container, e.g. IFoo.</typeparam>
- /// <typeparam name="TServiceImplementation">Implementation of the contract, e.g. Foo implementing IFoo.</typeparam>
- void RegisterService<TServiceContract, TServiceImplementation>()
- where TServiceImplementation : TServiceContract
- where TServiceContract : class;
- /// <summary>
- /// Registers service of type TServiceContract in the container. An instance of TServiceImplementation will be created by the container and registerd as TServiceContract.
- /// </summary>
- /// <typeparam name="TServiceContract">Contract that should be registered in the container, e.g. IFoo.</typeparam>
- /// <typeparam name="TServiceImplementation">Implementation of the contract, e.g. Foo implementing IFoo.</typeparam>
- /// <param name="serviceId">A string to identfy this entry.</param>
- void RegisterService<TServiceContract, TServiceImplementation>(string serviceId)
- where TServiceImplementation : TServiceContract
- where TServiceContract : class;
- /// <summary>
- /// Registers service of type TServiceContract in the container. The instance that must implement this service contract is passed as an argument.
- /// </summary>
- /// <typeparam name="TServiceContract">Contract that should be registerd in the container, e.g. IFoo.</typeparam>
- /// <param name="serviceInstance">Instance of service implementing TServiceContract, e.g. an instance of Foo where Foo implements IFoo.</param>
- void RegisterService<TServiceContract>(TServiceContract serviceInstance);
- /// <summary>
- /// Registers service of type TServiceContract in the container. The instance that must implement this service contract is passed as an argument.
- /// </summary>
- /// <typeparam name="TServiceContract">Contract that should be registerd in the container, e.g. IFoo.</typeparam>
- /// <param name="serviceInstance">Instance of service implementing TServiceContract, e.g. an instance of Foo where Foo implements IFoo.</param>
- /// <param name="serviceId"> A string to identfy this entry.</param>
- void RegisterService<TServiceContract>(TServiceContract serviceInstance, string serviceId);
- /// <summary>
- /// Registers a service using a given a delegate that creates the service. This enables the user of this container
- /// to control the creation of the service and at the same time use dependencies from the container.
- /// Example using lambdas : serviceContainer.RegisterService(container => new Foo("myConstant", container.GetService<IDependency>()))
- /// </summary>
- /// <typeparam name="TServiceContract">Contract that should be registerd in the container, e.g. IFoo.</typeparam>
- /// <param name="serviceConstructor">Delegate that constructs the service.</param>
- void RegisterService<TServiceContract>(ObjectConstructor<IServiceLocator, TServiceContract> serviceConstructor);
- /// <summary>
- /// Registers a service using a given a delegate that creates the service. This enables the user of this container
- /// to control the creation of the service and at the same time use dependencies from the container.
- /// Example using lambdas : serviceContainer.RegisterService(container => new Foo("myConstant", container.GetService<IDependency>()))
- /// </summary>
- /// <typeparam name="TServiceContract">Contract that should be registerd in the container, e.g. IFoo.</typeparam>
- /// <param name="serviceConstructor">Delegate that constructs the service.</param>
- /// <param name="serviceId"> A string to identfy this entry.</param>
- void RegisterService<TServiceContract>(ObjectConstructor<IServiceLocator, TServiceContract> serviceConstructor, string serviceId);
- }
- /// <summary>
- /// Delegate used by the service container to enable outside control of the construction of an object in the container.
- /// </summary>
- /// <typeparam name="TServiceLocator"></typeparam>
- /// <typeparam name="TReturnType"></typeparam>
- /// <param name="serviceLocator"></param>
- /// <returns></returns>
- public delegate TReturnType ObjectConstructor<TServiceLocator, TReturnType>(TServiceLocator serviceLocator);
- }
|