mirror of
https://github.com/DCFApixels/DragonECS-AutoInjections.git
synced 2026-04-21 23:15:54 +08:00
Update README-RU.md
This commit is contained in:
parent
1201867575
commit
1b3c009768
57
README-RU.md
57
README-RU.md
@ -35,8 +35,7 @@
|
|||||||
|
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
Расширение призвано сократить объем кода, упростив инъекцию зависимостей, делая их автоматически.
|
Расширение автоматизирует внедрение зависимостей, что позволяет сократить объем кода и упростить разработку.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Проект в стадии разработки. API может меняться.
|
> Проект в стадии разработки. API может меняться.
|
||||||
|
|
||||||
@ -52,26 +51,31 @@
|
|||||||
</br>
|
</br>
|
||||||
|
|
||||||
# Установка
|
# Установка
|
||||||
Семантика версионирования - [Открыть](https://gist.github.com/DCFApixels/e53281d4628b19fe5278f3e77a7da9e8#file-dcfapixels_versioning_ru-md)
|
Семантика версионирования - [Открыть](https://gist.github.com/DCFApixels/af79284955bf40e9476cdcac79d7b098#file-dcfapixels_versioning-md)
|
||||||
## Окружение
|
## Окружение
|
||||||
Обязательные требования:
|
Обязательные требования:
|
||||||
+ Зависимость: [DragonECS](https://github.com/DCFApixels/DragonECS)
|
+ Зависимость: [DragonECS](https://github.com/DCFApixels/DragonECS)
|
||||||
+ Минимальная версия C# 7.3;
|
+ Минимальная версия C# 7.3;
|
||||||
|
|
||||||
Опционально:
|
Поддерживает:
|
||||||
+ Игровые движки с C#: Unity, Godot, MonoGame и т.д.
|
+ Игровые движки с C#: Unity, Godot, MonoGame и т.д.
|
||||||
|
|
||||||
Протестировано:
|
Протестировано на:
|
||||||
+ **Unity:** Минимальная версия 2020.1.0;
|
* **Unity:** Минимальная версия 2021.2.0.
|
||||||
|
|
||||||
## Установка для Unity
|
## Установка для Unity
|
||||||
* ### Unity-модуль
|
* ### Unity-модуль
|
||||||
Поддерживается установка в виде Unity-модуля в при помощи добавления git-URL [в PackageManager](https://docs.unity3d.com/2023.2/Documentation/Manual/upm-ui-giturl.html) или ручного добавления в `Packages/manifest.json`:
|
Поддерживается установка в виде Unity-модуля при помощи добавления git-URL [в PackageManager](https://docs.unity3d.com/2023.2/Documentation/Manual/upm-ui-giturl.html):
|
||||||
```
|
```
|
||||||
https://github.com/DCFApixels/DragonECS-AutoInjections.git
|
https://github.com/DCFApixels/DragonECS-AutoInjections.git
|
||||||
```
|
```
|
||||||
|
Или ручного добавления этой строчки в `Packages/manifest.json`:
|
||||||
|
```
|
||||||
|
"com.dcfa_pixels.dragonecs-auto_injections": "https://github.com/DCFApixels/DragonECS-AutoInjections.git",
|
||||||
|
```
|
||||||
|
|
||||||
* ### В виде исходников
|
* ### В виде исходников
|
||||||
Фреймворк так же может быть добавлен в проект в виде исходников.
|
Можно так же напрямую скопировать в проект исходники фреймворка.
|
||||||
|
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
@ -88,30 +92,33 @@ _pipeline = EcsPipeline.New()
|
|||||||
.BuildAndInit();
|
.BuildAndInit();
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Проверьте что в инициализации добавлен вызов `AutoInject()`, иначе ничего не будет работать.
|
||||||
|
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
# Инъекция зависимостей
|
# Инъекция зависимостей
|
||||||
Атрибут `[EcsInject]` убирает необходимость использования интерфейса `IEcsInject<T>`, поля помеченные таким атрибутом автоматически подхватят зависимости внедренные в Pipeline. Пример:
|
Атрибут `[DI]` заменяет интерфейс `IEcsInject<T>`, Поля, отмеченные этим атрибутом, автоматически получают зависимости, внедрённые в Pipeline. Пример:
|
||||||
```csharp
|
```csharp
|
||||||
[EcsInject] EcsDefaultWorld _world;
|
[DI] EcsDefaultWorld _world;
|
||||||
```
|
```
|
||||||
Так же можно делать внедрение через свойство или метод:
|
Так же можно делать внедрение через свойство или метод:
|
||||||
```csharp
|
```csharp
|
||||||
EcsDefaultWorld _world;
|
EcsDefaultWorld _world;
|
||||||
|
|
||||||
//Обязательно наличие set блока.
|
//Обязательно наличие set блока.
|
||||||
[EcsInject] EcsDefaultWorld World { set => _world = value; }
|
[DI] EcsDefaultWorld World { set => _world = value; }
|
||||||
|
|
||||||
//Количество аргументов должно быть равно 1.
|
//Количество аргументов должно быть равно 1.
|
||||||
[EcsInject] void InjectWorld(EcsDefaultWorld world) => _world = world;
|
[DI] void InjectWorld(EcsDefaultWorld world) => _world = world;
|
||||||
```
|
```
|
||||||
|
|
||||||
> Поддерживается агрессивная инъекция, инъекция будет произведена без атрибута `[EcsInject]`, для этого нужно вызвать `.AutoInject(true)`.
|
> Агрессивная инъекция (без атрибута `[DI]`) включается вызовом `.AutoInject(true)`.
|
||||||
|
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
# Auto Builder аспектов
|
# Auto Builder аспектов
|
||||||
Так же AutoInjections упрощает построение аспектов. Для начала наследуйте аспект не от `EcsAspect`, а от `EcsAspectAuto`, а далее добавьте специальные атрибуты.
|
Так же AutoInjections упрощает построение аспектов. Для этого есть следующие атрибуты:
|
||||||
|
|
||||||
Атрибуты для инициализации полей с пулами:
|
Атрибуты для инициализации полей с пулами:
|
||||||
* `[Inc]` - кеширует пул и добавит тип компонента в включающее ограничение аспекта, аналог метода `Include`;
|
* `[Inc]` - кеширует пул и добавит тип компонента в включающее ограничение аспекта, аналог метода `Include`;
|
||||||
@ -129,6 +136,7 @@ EcsDefaultWorld _world;
|
|||||||
|
|
||||||
# Auto Runner-ы
|
# Auto Runner-ы
|
||||||
Для получения раннеров без добавления, есть атрибут `[BindWithRunner(type)]` и метод `GetRunnerAuto<T>()`.
|
Для получения раннеров без добавления, есть атрибут `[BindWithRunner(type)]` и метод `GetRunnerAuto<T>()`.
|
||||||
|
|
||||||
``` c#
|
``` c#
|
||||||
[BindWithRunner(typeof(DoSomethingProcessRunner))]
|
[BindWithRunner(typeof(DoSomethingProcessRunner))]
|
||||||
interface IDoSomethingProcess : IEcsProcess
|
interface IDoSomethingProcess : IEcsProcess
|
||||||
@ -152,6 +160,7 @@ _pipeline.GetRunnerAuto<IDoSomethingProcess>().Do();
|
|||||||
</br>
|
</br>
|
||||||
|
|
||||||
# Пример кода
|
# Пример кода
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
class VelocitySystemDI : IEcsRun
|
class VelocitySystemDI : IEcsRun
|
||||||
{
|
{
|
||||||
@ -162,8 +171,8 @@ class VelocitySystemDI : IEcsRun
|
|||||||
[Inc] public EcsPool<Velocity> velocities;
|
[Inc] public EcsPool<Velocity> velocities;
|
||||||
}
|
}
|
||||||
|
|
||||||
[EcsInject] EcsDefaultWorld _world;
|
[DI] EcsDefaultWorld _world;
|
||||||
[EcsInject] TimeService _time;
|
[DI] TimeService _time;
|
||||||
|
|
||||||
public void Run()
|
public void Run()
|
||||||
{
|
{
|
||||||
@ -174,9 +183,12 @@ class VelocitySystemDI : IEcsRun
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Тот же код но без AutoInjections</summary>
|
<summary>Тот же код но без AutoInjections</summary>
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
class VelocitySystem : IEcsRun, IEcsInject<EcsDefaultWorld>, IEcsInject<TimeService>
|
class VelocitySystem : IEcsRun, IEcsInject<EcsDefaultWorld>, IEcsInject<TimeService>
|
||||||
{
|
{
|
||||||
@ -209,15 +221,14 @@ class VelocitySystem : IEcsRun, IEcsInject<EcsDefaultWorld>, IEcsInject<TimeServ
|
|||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
</br>
|
|
||||||
|
|
||||||
# Не null инъекции
|
# Не null инъекции
|
||||||
|
|
||||||
Чтобы поле помеченное `[EcsInject]` было проинициализированно даже в случае отстувия инъекции, в конструктор атрибута можно передать тип болванку. В примере ниже поле `foo` получит экземпляр класса `Foo` из инъекции или экземпляр `FooDummy : Foo` если инъекции не было.
|
Чтобы поле, отмеченное атрибутом `[DI]`, было проинициализировано даже в случае отсутствия инъекции, в конструктор атрибута можно передать тип-заглушку. В примере ниже поле `foo` получит экземпляр `Foo` из инъекции или экземпляр `FooDummy : Foo`, если инъекция не была выполнена.
|
||||||
``` csharp
|
``` csharp
|
||||||
[EcsInject(typeof(FooDummy))] Foo foo;
|
[DI(typeof(FooDummy))] Foo foo;
|
||||||
```
|
```
|
||||||
> Переданный тип должен иметь конструктор без параметров и быть либо того же типа что и тип поля, либо производного типа.
|
> Переданный тип должен иметь конструктор без параметров и быть либо того же типа, что и поле, либо производным от него.
|
||||||
|
|
||||||
Расширение так же сообщит если по завершению предварительной инъекции, остались не проинициализированные поля с `[EcsInject]`.
|
Расширение также сообщит, если после завершения предварительной инъекции остались непроинициализированные поля с атрибутом `[DI]`.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user