123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- using System;
- namespace Wayne.Lib
- {
- /// <summary>
- /// This interface represents the locator part of the service container. Clients are often only interested in retrieving
- /// services from the container and thus only interested in this contract instead of the entire service container.
- /// </summary>
- public interface IServiceLocator
- {
- /// <summary>
- /// Retrieves the service of type serviceType from the container.
- /// </summary>
- /// <typeparam name="TServiceContract">Type of service.</typeparam>
- /// <returns>Service from the service container.</returns>
- TServiceContract GetService<TServiceContract>();
- /// <summary>
- /// Retrieves the service of type serviceType from the container.
- /// </summary>
- /// <typeparam name="TServiceContract">Type of service.</typeparam>
- /// <param name="serviceId">Id of the service , supplied upon registration.</param>
- /// <returns>Service from the service container.</returns>
- TServiceContract GetService<TServiceContract>(string serviceId);
- /// <summary>
- /// Retrieves the service of type serviceType from the container.
- /// </summary>
- /// <param name="serviceType">Type of service.</param>
- /// <returns>Service from the service container.</returns>
- object GetService(Type serviceType);
- /// <summary>
- /// Retrieves the service of type serviceType from the container.
- /// </summary>
- /// <param name="serviceType">Type of service.</param>
- /// <param name="serviceId">Id of the service , supplied upon registration.</param>
- /// <returns>Service from the service container.</returns>
- object GetService(Type serviceType, string serviceId);
- /// <summary>
- /// Gets a registered service. If the service is not registered, it invokes the supplied
- /// callback to get a default instance of the service. NOTE that this instance is not automatically registered.
- /// </summary>
- /// <typeparam name="TServiceContract"></typeparam>
- /// <param name="func"></param>
- /// <returns></returns>
- TServiceContract GetServiceOrDefault<TServiceContract>(CreateDefaultService<TServiceContract> func);
- /// <summary>
- /// Gets a registered service. If the service is not registered, it invokes the supplied
- /// callback to get a default instance of the service. NOTE that this instance is not automatically registered.
- /// </summary>
- /// <typeparam name="TServiceContract"></typeparam>
- /// <param name="func"></param>
- /// <param name="serviceId">Id of the service , supplied upon registration.</param>
- /// <returns></returns>
- TServiceContract GetServiceOrDefault<TServiceContract>(CreateDefaultService<TServiceContract> func, string serviceId);
- /// <summary>
- /// Creates an instance of T. Service locator uses the first constructor it finds that it can use based on what is
- /// registered in the service container and the additional parameters.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="additionalParameter">List of parameters that</param>
- /// <returns>An instance of the created object</returns>
- [Obsolete("Use ServiceActivator.Create<T> instead")]
- T CreateInstance<T>(params object[] additionalParameter) where T : class;
- /// <summary>
- /// Creates an instance of T. Service locator uses the first constructor it finds that it can use based on what is
- /// registered in the service container and the additional parameters.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="serviceId">Id of the service , supplied upon registration.</param>
- /// <param name="additionalParameter">List of parameters that</param>
- /// <returns>An instance of the created object</returns>
- [Obsolete("Use ServiceActivator.Create<T> instead")]
- T CreateInstance<T>(string serviceId, params object[] additionalParameter) where T : class;
- /// <summary>
- /// Creates an instance of the specified type. Service locator uses the first constructor it finds that it can use
- /// based on what is regeistered in the service container and the additional parameters.
- /// </summary>
- /// <param name="typeToInstantiate"></param>
- /// <param name="additionalParameter"></param>
- /// <returns></returns>
- object CreateInstance(Type typeToInstantiate, params object[] additionalParameter);
- /// <summary>
- /// Creates an instance of the specified type. Service locator uses the first constructor it finds that it can use
- /// based on what is regeistered in the service container and the additional parameters.
- /// </summary>
- /// <param name="typeToInstantiate"></param>
- /// <param name="serviceId">Id of the service , supplied upon registration.</param>
- /// <param name="additionalParameter"></param>
- /// <returns></returns>
- object CreateInstance(Type typeToInstantiate, string serviceId, params object[] additionalParameter);
- /// <summary>
- /// Tries to locate the service T. If it does not succeed, it returns null.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- T TryGetService<T>();
- /// <summary>
- /// Tries to locate the service T. If it does not succeed, it returns null.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="serviceId">Id of the service , supplied upon registration.</param>
- /// <returns></returns>
- T TryGetService<T>(string serviceId);
- /// <summary>
- /// Tries to locate the specified service. If it does not succeed it returns null.
- /// </summary>
- /// <param name="serviceType"></param>
- /// <returns></returns>
- object TryGetService(Type serviceType);
- /// <summary>
- /// Tries to locate the specified service. If it does not succeed it returns null.
- /// </summary>
- /// <param name="serviceType"></param>
- /// <param name="serviceId">Id of the service , supplied upon registration.</param>
- /// <returns></returns>
- object TryGetService(Type serviceType, string serviceId);
-
- }
- /// <summary>
- /// Delegate for creating a default service with the IServiceLocator.GetServiceOrDefault method.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- public delegate T CreateDefaultService<T>();
- }
|