IoC контейнер
IoC контейнер — це шаблон проєктування, який дозволяє спростити впровадження залежностей між класами дотримуючись інверсії керування.
Стосунки
Є реалізацією фабричного методу
Опис мовою C#
class IoC { readonly IDictionary<Type, Type> types = new Dictionary<Type, Type>(); public void Register<TContract, TImplementation>() { types[typeof(TContract)] = typeof(TImplementation); } public T Resolve<T>() { return (T)Resolve(typeof(T)); } public object Resolve(Type contract) { Type implementation = types[contract]; ConstructorInfo constructor = implementation.GetConstructors()[0]; ParameterInfo[] constructorParameters = constructor.GetParameters(); if (constructorParameters.Length == 0) { return Activator.CreateInstance(implementation); } List<object> parameters = new List<object>(constructorParameters.Length); foreach (ParameterInfo parameterInfo in constructorParameters) { parameters.Add(Resolve(parameterInfo.ParameterType)); } return constructor.Invoke(parameters.ToArray()); } } class Program { static void Main(string[] args) { var ioc = new IoC(); ioc.Register<ILogger, Logger>(); ioc.Register<ConsoleLogger, ConsoleLogger>(); ConsoleLogger objCOnsoleLogger = ioc.Resolve<ConsoleLogger>(); } }
Див. також
Джерела
- A Basic IoC Container [Архівовано 25 лютого 2020 у Wayback Machine.]
- Define your own ioc container [Архівовано 18 серпня 2016 у Wayback Machine.]
- п
- о
- р
Абстрагування (програмування) • Делегування (Delegation) • Інтерфейс (Interface) • Інтерфейс-маркер (Marker Interface) • Незмінний інтерфейс (Immutable Interface) • Незмінний об'єкт (Immutable Object) • Функціональний дизайн (Functional Design) • Контейнер властивостей (Property Container) • Канал подій (Event Channel)
Абстрактна фабрика (Abstract Factory) • Будівник (Builder) • Одинак (Singleton) • Прототип (Prototype) • Фабричний метод (Factory Method) • Пул об'єктів • Fluent builder • Мультитон • Лінива ініціалізація • Отримання ресурсу, як ініціалізація (Resource Acquisition Is Initialization)
Адаптер (Adapter) • Декоратор (Decorator) • Замісник (Proxy) • Компонувальник (Composite) • Міст (Bridge) • Легковаговик (Flyweight) • Фасад (Facade) • Модуль • Виділення приватного класу даних • Близнюки
Відвідувач (Visitor) • Інтерпретатор (Interpreter) • Ітератор (Iterator) • Команда (Command) • Ланцюжок відповідальностей (Chain of Responsibility) • Посередник (Mediator) • Спостерігач (Observer) • Стан (State) • Стратегія (Strategy) • Знімок (Memento) • Шаблонний метод (Template Method) • Одноразовий відвідувач • Null object • Специфікація • Feature toggle • Мультиметод • Перехоплювач (Interceptor) • Накопичувач (Collecting Parameter) • Слуга (Servant)
Функтор • Генератор • Замикання • Монади • Каррінг • Функція зворотного виклику • Функція вищого порядку • Вкладена функція • Результат (Result)
конкурентного
програмування
Блокування • Модель акторів • Бар'єр • Монітор • Семафор • М'ютекс • Планувальник операційної системи • Локальна пам'ять ниток • Оптимістичне блокування (Optimistic Offline Lock) • Песимістичне блокування (Pessimistic Offline Lock) • Активний об'єкт (Active Object)
Базові шаблони | Клієнт-серверна архітектура • Front end та back end • Триярусна архітектура • Гексагональна архітектура (Архітектура портів та адаптерів) • Відокремлений інтерфейс (Separated Interface) • Сервісно-орієнтована архітектура • Мікросервіси • Push/Pull модель |
---|---|
Шаблони об'єктного структурування | |
Шаблони представлення | |
Шаблони предметно-орієнтованого проєктування | Rich/Anemic модель • DDD • Інваріант • Entity • Value Object • Aggregate Root • DTO • Repository • Патерн сервісного рівня (Service Layer) • Фабричний метод (Factory Method) • Специфікація |
Шаблони сервісно-орієнтованої архітектури | Сервісно-орієнтована архітектура • Мікросервіси • Шлюз (Gateway) • Публікація-підписка • Інтеграційна шина даних • Event Sourcing • Двофазна транзакція • Saga • Circuit breaker • Асинхронна http модель |
корпоративних
програмних
додатків
Базові шаблони | Об'єкт-значення (Value Object) • Гроші (Money) • Особливий випадок (Special Case) • Супертип рівня (Layer Supertype) • Відокремлений інтерфейс (Separated Interface) • Шлюз (Gateway) • Розподільник (Mapper) • Реєстр (Registry) • Плагін (Plugin) • Набір записів (Record Set) • Заглушка сервісу (Service Stub) |
---|---|
Шаблони логіки домену | Сценарій транзакції (Transaction script) • Модель предметної області (Domain model) • Обробник таблиці (Table Module) • Патерн сервісного рівня (Service Layer) |
Шаблони сховища даних | Активний запис (Active Record) • Шлюз до даних таблиці (Table Data Gateway) • Шлюз до даних запису (Row Data Gateway) • Відображення даних (Data Mapper) |
Шаблони об'єктно-реляційної поведінки | Одиниця роботи (Unit Of Work) • Мапа відповідності (Identity Map) • Ліниве завантажування (Lazy Load) |
Шаблони об'єктно-реляційного структурування | Поле первинного ключа (Identity Field) • Розмітка зовнішніх ключів (Foreign Key Mapping) • Розмітка зв'язків таблиць (Association Table Mapping) • Відображення залежних об'єктів (Dependent Mapping) • Об'єднане значення (Embedded Value) • Серіалізований великий об'єкт (Serialized LOB) • Наслідування з однією таблицею (Single Table Inheritance) • Наслідування з таблицею для кожного класу (Class Table Inheritance) • Наслідування з таблицею для кожного конкретного класу (Concrete Table Inheritance) • Відображення із наслідуванням (Inheritance Mappers) • База даних звітності |
Шаблони обробки об'єктно-реляційних метаданих | Відображення на основі метаданих (Metadata Mapping) • Об'єкт-запит (Query Object) • Сховище (Repository) |
Шаблони вебпредставлення | Модель-вид-контролер (Model View Controller) • Контролер сторінки (Page Controller) • Єдина точка входу (Front controller) • Контролер аплікації (Application Controller) • Шаблонізатор (Template View) • Перетворювач (Transform View) • Двокрокова шаблонізація (Two Step View) |
Шаблони розподіленої обробки даних | Фасад (Remote Facade) • Об'єкт передачі даних (Data Transfer Object) |
Шаблони локального конкурентного програмування | Оптимістичне блокування (Optimistic Offline Lock) • Песимістичне блокування (Pessimistic Offline Lock) • Блокування із низьким рівнем деталізації (Coarse Grained Lock) • Неявне блокування (Implicit Lock) |
Шаблони збереження стану сеансу | Збереження стану сеансу на стороні клієнта (Client Session State) • Збереження стану сеансу на стороні сервера (Server Session State) • Збереження стану сеансу в базі даних (Database Session State) |
PageObject • Макет об'єкта (Mock Object) • Заглушка сервісу (Service Stub) • Скромний об'єкт (Humble Object)
Впровадження залежностей • IoC контейнер • Локатор служб (Service Locator) • М'яке видалення (Soft Delete) • Auditable Entity • Entity Component System (ECS) • Extract, Transform, Load (ETL)
Design Patterns (книга) • Бізнес-логіка • Інваріант • Зв'язність (Coupling) • Пов'язаність (Cohesion) • Закон Деметри • KISS • DRY • YAGNI • Tell Don't Ask • SOLID • CQRS • GRASP • Ідемпотентність • Мартін Фаулер • Антипатерн