You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel/Services/DependencyInjection/Contracts/IResolver.cs

122 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
namespace ZeroLevel.Patterns.DependencyInjection
{
/// <summary>
/// Интерфейс с методами разрешений зависимостей
/// </summary>
public interface IResolver
{
#region Activator
/// <summary>
/// Создание экземпляра объекта указанного типа
/// </summary>
/// <typeparam name="T">Тип объекта</typeparam>
/// <param name="resolveName">Имя разрешения зависимости</param>
/// <returns>Экземпляр объекта</returns>
T CreateInstance<T>(string resolveName = "");
/// <summary>
/// Создание экземпляра объекта указанного типа
/// </summary>
/// <typeparam name="T">Тип объекта</typeparam>
/// <param name="args">Аргументы конструктора</param>
/// <param name="resolveName">Имя разрешения зависимости</param>
/// <returns>Экземпляр объекта</returns>
T CreateInstance<T>(object[] args, string resolveName = "");
/// <summary>
/// Создание экземпляра объекта указанного типа
/// </summary>
/// <param name="type">Тип объекта</param>
/// <param name="resolveName">Имя разрешения зависимости</param>
/// <returns>Экземпляр объекта</returns>
object CreateInstance(Type type, string resolveName = "");
/// <summary>
/// Создание экземпляра объекта указанного типа
/// </summary>
/// <param name="type">Тип объекта</param>
/// <param name="args">Аргументы конструктора</param>
/// <param name="resolveName">Имя разрешения зависимости</param>
/// <returns>Экземпляр объекта</returns>
object CreateInstance(Type type, object[] args, string resolveName = "");
#endregion
#region Resolving
/// <summary>
/// Разрешение зависимости
/// </summary>
/// <typeparam name="T">Тип контракта</typeparam>
/// <param name="compose">Указание провести композицию при построении объектов</param>
/// <returns>Инстанс</returns>
T Resolve<T>(bool compose = true);
/// <summary>
/// Разрешение зависимости
/// </summary>
/// <typeparam name="T">Тип контракта</typeparam>
/// <param name="resolveName">Имя разрешения зависимости</param>
/// <param name="compose">Указание провести композицию при построении объектов</param>
/// <returns>Инстанс</returns>
T Resolve<T>(string resolveName, bool compose = true);
/// <summary>
/// Разрешение зависимости
/// </summary>
/// <typeparam name="T">Тип контракта</typeparam>
/// <param name="args">Аргументы конструктора</param>
/// <param name="compose">Указание провести композицию при построении объектов</param>
/// <returns>Инстанс</returns>
T Resolve<T>(object[] args, bool compose = true);
/// <summary>
/// Разрешение зависимости
/// </summary>
/// <typeparam name="T">Тип контракта</typeparam>
/// <param name="resolveName">Имя разрешения зависимости</param>
/// <param name="args">Аргументы конструктора</param>
/// <param name="compose">Указание провести композицию при построении объектов</param>
/// <returns>Инстанс</returns>
T Resolve<T>(string resolveName, object[] args, bool compose = true);
/// <summary>
/// Разрешение зависимости
/// </summary>
/// <param name="type">Тип контракта</param>
/// <param name="compose">Указание провести композицию при построении объектов</param>
/// <returns>Инстанс</returns>
object Resolve(Type type, bool compose = true);
/// <summary>
/// Разрешение зависимости
/// </summary>
/// <param name="type">Тип контракта</param>
/// <param name="resolveName">Имя разрешения зависимости</param>
/// <param name="compose">Указание провести композицию при построении объектов</param>
/// <returns>Инстанс</returns>
object Resolve(Type type, string resolveName, bool compose = true);
/// <summary>
/// Разрешение зависимости
/// </summary>
/// <param name="type">Тип контракта</param>
/// <param name="args">Аргументы конструктора</param>
/// <param name="compose">Указание провести композицию при построении объектов</param>
/// <returns>Инстанс</returns>
object Resolve(Type type, object[] args, bool compose = true);
/// <summary>
/// Разрешение зависимости
/// </summary>
/// <param name="type">Тип контракта</param>
/// <param name="resolveName">Имя разрешения зависимости</param>
/// <param name="args">Аргументы конструктора</param>
/// <param name="compose">Указание провести композицию при построении объектов</param>
/// <returns>Инстанс</returns>
object Resolve(Type type, string resolveName, object[] args, bool compose = true);
#endregion
#region Safe resolving
object TryResolve(Type type, out object result, bool compose = true);
object TryResolve(Type type, object[] args, out object result, bool compose = true);
object TryResolve(Type type, string resolveName, out object result, bool compose = true);
bool TryResolve<T>(out T result, bool compose = true);
bool TryResolve<T>(object[] args, out T result, bool compose = true);
bool TryResolve<T>(string resolveName, out T result, bool compose = true);
bool TryResolve<T>(string resolveName, object[] args, out T result, bool compose = true);
bool TryResolve(Type type, string resolveName, object[] args, out object result, bool compose = true);
#endregion
}
}

Powered by TurnKey Linux.