Oscallo.Castle.AddonedKernel 0.9.4

dotnet add package Oscallo.Castle.AddonedKernel --version 0.9.4                
NuGet\Install-Package Oscallo.Castle.AddonedKernel -Version 0.9.4                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Oscallo.Castle.AddonedKernel" Version="0.9.4" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Oscallo.Castle.AddonedKernel --version 0.9.4                
#r "nuget: Oscallo.Castle.AddonedKernel, 0.9.4"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Oscallo.Castle.AddonedKernel as a Cake Addin
#addin nuget:?package=Oscallo.Castle.AddonedKernel&version=0.9.4

// Install Oscallo.Castle.AddonedKernel as a Cake Tool
#tool nuget:?package=Oscallo.Castle.AddonedKernel&version=0.9.4                

Oscallo Castle AddonedKernel

RU: Дополнение к библиотеке Castle.Windstor, позволяющее добавлять вызываемые автоматически методы на основе интерфейсов.
EN: Extension to the Castle.Windstor library is enabled by automatically called interface-based methods.

Пример использования (Example of use)

RU: 1. Необходимо реализовать класс, наследуемый IInjector. Опционально возможно реализовать классы, наследуемые от IResolver и IRegistrar
EN: 1. You need to implement a class that inherits from IInjector. Optionally, it is possible to implement classes that inherit from IResolver and IRegistrar

public class Injector : IInjector
{
	//...
}

RU: или же
EN: or

public class Registrar : IRegistrar
{
	//...
}

public class Resolver : IResolver
{
	//...
}

RU: 2. Создать экземпляр контейнера
EN: 2. Create a container instance

WindsorContainer container = new();

RU: 3. Для простоты рекомендуется реализовать в классах из пункта 2 статических метода
EN: 3. For simplicity, it is recommended to implement static methods in classes from point 2

public static void Register(IWindsorContainer windsorContainer, params IRegistration[] registrations)
{
	windsorContainer.Register(registrations);
}

public static T Resolve<T>(IWindsorContainer windsorContainer)
{
	return windsorContainer.Resolve<T>();
}

RU: Подготовительный этап закончен.

  1. Необходимо создать Builder:

4.1 Создадим список будущих методов, вызываемых у интерфейса.

EN: The preparatory stage is over.

  1. You need to create a Builder:

4.1 Let's create a list of future methods called on the interface.

List<CalleableMethodInfo> methodInfos = new();

RU: 4.2 Необходимо заполнить информацию о методе для типа:

4.2.1 Создаем массив объектов, в массив передаем необходимые аргументы метода

Далее разберем на основе интерфейса автоматической интеграции. Для автоматической интеграции необходим сам объект класса, наследуемого от IRegistrar, он и передается в массив.

EN: 4.2 It is necessary to fill in the method information for the type:

4.2.1 Create an array of objects, pass the necessary method arguments to the array

Next, we will analyze it based on the automatic integration interface. For automatic integration, the object of the class itself, inherited from IRegistrar, is required, and it is transferred to the array.

object[] parametersArray = new object[] { injector };

RU: 4.2.2 Создаем информацию о методе IIntegrator - контракт, гарантирующий создание метода регистрации зависимостей, он содержит лишь один метод void Integrate(IRegistrar injector)

EN: 4.2.2 Create information about the method IIntegrator is a contract that guarantees the creation of a dependency registration method; it contains only one method void Integrate(IRegistrar injector)

MethodInfo methodInfo = typeof(IIntegrator).GetMethod(nameof(IIntegrator.Integrate));

RU: 4.2.3 Создаем структуру, описывающую алгоритм действий, для Builder

EN: 4.2.3 Create a structure describing the algorithm of actions for ```Builder``

CalleableMethodInfo calleableMethodInfo = new() { MethodCallTypeEnum = CalleableMethodCallTypeEnum.PreResolve, MethodTypeEnum = CalleableMethodTypeEnum.Examplar, MethodInfo = methodInfo, Arguments = parametersArray, MethodArgumentsEnum = CalleableMethodArgumentsEnum.FromCalleabeMethod };

RU: Далее разберем, что было передано при создании
MethodCallTypeEnum - Сущность, указывающая когда будет выполнен метод.
MethodTypeEnum - Сущность, указывающая где будет выполнен метод.
MethodInfo - информация о методе из пункта 5.2.2
Arguments - аргументы метода из пункта 5.2.1
MethodArgumentsEnum - сущность, отвечающая за преобразование аргументов.

Имеет 3 состояния:
CalleableMethodArgumentsEnum.FromInjector - использование аргументов, в чистом виде из Arguments CalleableMethodArgumentsEnum.FromInjectorWithComponent - аналогично CalleableMethodArgumentsEnum.FromInjector, только сам компонент подставляется первым аргументом.
CalleableMethodArgumentsEnum.FromCalleabeMethod - использование аргументов, подобраных активатором

4.2.4 Добавляем это в ранее созданный в пункте 5.1 список

EN: Next, let's look at what was transferred during creation.
MethodCallTypeEnum - An entity indicating when the method will be executed.
MethodTypeEnum - An entity indicating where the method will be executed.
MethodInfo - information about the method from clause 5.2.2
Arguments - method arguments from clause 5.2.1
MethodArgumentsEnum - the entity responsible for converting arguments.

Has 3 states:
CalleableMethodArgumentsEnum.FromInjector - use of arguments, in their pure form from Arguments CalleableMethodArgumentsEnum.FromInjectorWithComponent - similar to CalleableMethodArgumentsEnum.FromInjector, only the component itself is substituted as the first argument.
CalleableMethodArgumentsEnum.FromCalleabeMethod - use of arguments picked up by the activator

4.2.4 Add this to the list previously created in paragraph 5.1

methodInfos.Add(calleableMethodInfo);

RU: 4.2.5 Создаем Builder или же добавляем в него новые элементы

EN: 4.2.5 Create a Builder or add new elements to it

if (builder == null)
{
	return new Builder(new BuilderElement(typeof(IIntegrator), methodInfos));
}
else
{
	builder.Add(new BuilderElement(typeof(IIntegrator), methodInfos));
}

RU: Cам Builder хранится в статическом поле BuildeableComponentActivatorFacility.Builder

4.2.6 Добавляем BuildeableComponentActivatorFacility

EN: The Builder itself is stored in the static field BuildeableComponentActivatorFacility.Builder

4.2.6 Add ```BuildeableComponentActivatorFacility

injector.AddFacilityIfAbsent<BuildeableComponentActivatorFacility>();

Лицензия (License)

RU: © 2024 Oscallo. Это бесплатное программное обеспечение, распространяемое в соответствии с лицензией Apache 2.0.
EN: © 2024 Oscallo. This is free software distributed under the [Apache 2.0] license(https://github.com/Oscallo/Castle.AddonedKernel?tab=Apache-2.0-1-ov-file).

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.9.4 143 8/19/2024
0.9.3 88 7/31/2024
0.9.2 74 7/28/2024
0.9.1 78 7/25/2024
0.9.0 91 7/22/2024