Pure.DI 开源项目教程
Pure.DI Pure DI for .NET without frameworks! 项目地址: https://gitcode.com/gh_mirrors/pu/Pure.DI
1. 项目介绍
Pure.DI 是一个针对 .NET 的编译时依赖注入(DI)代码生成器。它支持从 .NET Framework 2.0 开始的所有版本。Pure.DI 通过生成简洁高效的依赖注入逻辑代码,避免了传统 DI 框架中的反射和动态实例化,从而消除了运行时性能开销。
主要特点包括:
- 零开销:生成的代码与手动实现几乎无异,保证了性能。
- 编译时验证:在编译阶段检测依赖关系问题,确保程序的稳定性和可靠性。
- 跨平台兼容性:不依赖运行时,保证了在所有支持的平台上的行为一致性。
- 熟悉的语法:API 设计与主流的 IoC/DI 框架相似,易于上手。
- 精确的泛型支持:推荐使用专用标记类型,提高对象图的构建精度。
- 透明度:可以查看和调试生成的代码,便于测试和调试。
- 内置 BCL 支持:原生支持多种 Base Class Library 类型。
2. 项目快速启动
首先,确保你的项目满足以下要求:
- .NET SDK 6.0.4 或更高版本。
- C# 8 或更高版本(仅针对使用 Pure.DI 源生成器的项目)。
安装 Pure.DI
在项目的根目录中运行以下命令来安装 Pure.DI NuGet 包:
dotnet add package Pure.DI
配置依赖注入
接下来,配置你的项目以使用 Pure.DI 进行依赖注入。
在项目文件中,添加以下代码以设置依赖注入:
DI.Setup(nameof(Composition));
// 绑定 Random 为单例
DI.Bind<Random>().AsSingleton().To(() => new Random());
// 绑定 ShroedingersCat 为单例
DI.Bind<ShroedingersCat>().To(() => new ShroedingersCat(new Lazy<State>(() => State Alive or Dead)));
// 绑定 CardboardBox 为泛型实现
DI.Bind<IBox<T>>().To<CardboardBox<T>>();
// 设置应用的根
DI.Root<Program>("Root");
创建对象图
创建一个包含 Main
方法的 Program
类,并使用 Pure.DI 的 Root
属性来获取对象图:
class Program
{
static void Main(string[] args)
{
var composition = DI.Root<Program>("Root");
// 使用 composition 中的对象
}
}
3. 应用案例和最佳实践
复杂依赖处理
Pure.DI 能够处理复杂的依赖关系。例如,如果有多个服务依赖于一个配置服务,你可以这样绑定:
DI.Bind<IConfigService>().To<ConfigService>();
DI.Bind<OtherService>().To<OtherService>();
DI.Bind<YetAnotherService>().To<YetAnotherService>();
高性能应用
在性能敏感的应用中,使用 Pure.DI 可以减少内存消耗和准备开销。例如,对于需要频繁创建和销毁的对象,可以使用以下方式:
DI.Bind<MyService>().As Transient().To<MyService>();
4. 典型生态项目
Pure.DI 可以与多种生态项目配合使用,例如:
- Pure.DI.MS:与 Microsoft DI 集成。
- Pure.DI.Templates:用于从命令行创建项目的模板包。
这些项目扩展了 Pure.DI 的功能,使其能够更好地适应不同的开发需求。
Pure.DI Pure DI for .NET without frameworks! 项目地址: https://gitcode.com/gh_mirrors/pu/Pure.DI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考