VContainer 项目教程
1. 项目目录结构及介绍
VContainer 是一个运行在 Unity 游戏引擎上的依赖注入(DI)库。以下是项目的目录结构及其介绍:
VContainer/
├── Assets/
│ └── VContainer/
│ ├── Editor/
│ ├── Runtime/
│ ├── Samples~/
│ ├── Tests/
│ ├── VContainer.asmdef
│ └── VContainer.asmdef.meta
├── Packages/
├── ProjectSettings/
├── README.md
├── LICENSE
└── VContainer.sln
目录结构介绍
-
Assets/VContainer/: 包含 VContainer 的核心代码和相关资源。
- Editor/: 包含 Unity 编辑器扩展和工具。
- Runtime/: 包含 VContainer 的运行时代码。
- Samples~/: 包含示例项目,帮助用户理解如何使用 VContainer。
- Tests/: 包含单元测试代码。
- VContainer.asmdef: 定义 VContainer 的程序集。
- VContainer.asmdef.meta: 程序集定义的元数据文件。
-
Packages/: 包含 Unity 项目的包管理文件。
-
ProjectSettings/: 包含 Unity 项目的设置文件。
-
README.md: 项目介绍和使用说明。
-
LICENSE: 项目的开源许可证。
-
VContainer.sln: Visual Studio 解决方案文件。
2. 项目启动文件介绍
VContainer 的启动文件主要是 GameLifetimeScope
类,它继承自 LifetimeScope
类。以下是一个简单的启动文件示例:
public class GameLifetimeScope : LifetimeScope
{
protected override void Configure(IContainerBuilder builder)
{
// 注册依赖项
builder.RegisterEntryPoint<ActorPresenter>();
builder.Register<CharacterService>(Lifetime.Scoped);
builder.Register<IRouteSearch, AStarRouteSearch>(Lifetime.Singleton);
builder.RegisterComponentInHierarchy<ActorsView>();
}
}
启动文件介绍
- GameLifetimeScope: 继承自
LifetimeScope
,用于配置依赖注入的容器。 - Configure(IContainerBuilder builder): 重写
Configure
方法,用于注册依赖项。- RegisterEntryPoint
()
: 注册入口点,通常是一个实现了
IStartable
或ITickable
接口的类。 - Register
(Lifetime lifetime)
: 注册一个具体的类,并指定其生命周期(如
Scoped
或Singleton
)。 - RegisterComponentInHierarchy () : 注册一个在场景层次结构中找到的组件。
- RegisterEntryPoint
()
: 注册入口点,通常是一个实现了
3. 项目的配置文件介绍
VContainer 的配置文件主要是通过代码进行配置,而不是传统的配置文件。以下是一些常见的配置项:
配置项介绍
- Lifetime.Scoped: 每次请求时创建一个新的实例。
- Lifetime.Singleton: 在整个应用程序生命周期中只创建一个实例。
- RegisterEntryPoint () : 注册一个入口点,通常用于启动逻辑。
- Register (Lifetime lifetime) : 注册一个具体的类,并指定其生命周期。
- RegisterComponentInHierarchy () : 注册一个在场景层次结构中找到的组件。
示例配置
public class GameLifetimeScope : LifetimeScope
{
protected override void Configure(IContainerBuilder builder)
{
// 注册入口点
builder.RegisterEntryPoint<ActorPresenter>();
// 注册服务
builder.Register<CharacterService>(Lifetime.Scoped);
builder.Register<IRouteSearch, AStarRouteSearch>(Lifetime.Singleton);
// 注册组件
builder.RegisterComponentInHierarchy<ActorsView>();
}
}
通过以上配置,VContainer 可以在 Unity 项目中实现高效的依赖注入。