SourceInject 0.1.12
dotnet add package SourceInject --version 0.1.12
NuGet\Install-Package SourceInject -Version 0.1.12
<PackageReference Include="SourceInject" Version="0.1.12" />
paket add SourceInject --version 0.1.12
#r "nuget: SourceInject, 0.1.12"
// Install SourceInject as a Cake Addin #addin nuget:?package=SourceInject&version=0.1.12 // Install SourceInject as a Cake Tool #tool nuget:?package=SourceInject&version=0.1.12
Source Inject
C# 的源生成器,使用 Roslyn(C# 编译器)允许您在编译时生成依赖注入。通过这样做,您可以避免使用反射,并且服务会自动注册。
如何使用它
安装它,并将一个属性添加到您要将它注入服务提供程序中的类中,如下所示
[Inject]
public class ExampleService
{
private readonly AnotherService anotherService;
public ExampleService(AnotherService anotherService) =>
this.anotherService = anotherService;
public string GetValue() => anotherService.Value;
}
[Inject(ServiceLifetime.Singleton)]
public class AnotherService
{
public string Value => "Hello World!";
}
如上所示,您可以选择定义生命周期。默认生命周期是瞬时的。您还可以使用以下属性
InjectSingletonAttribute
InjectScopedAttribute
InjectTransientAttribute
最后一个与不传递任何参数使用 Inject
相同。
然后,您必须调用 Discover
方法,以便找到这些类并生成源。然后,您可以使用构造函数注入或服务定位器等要求它们,例如
var services = new ServiceCollection();
services.Discover();
var serviceProvider = services.BuildServiceProvider();
var exampleService = serviceProvider.GetRequiredService<ExampleService>();
您还可以在其他程序集中发现服务。要执行此操作,您必须调用方法 DiscoverIn<AssemblyName>
或 <AssemblyName>Discoverer.Discover(services)
。如果您的程序集名包含点 .
,它们将被下划线 _
替换。
所有这些方法(Discover
等)和属性都将为您生成到项目中。
您可以使用 Visual Studio 看到生成的代码。请参阅 这里 的示例。
安装
该软件包可用(在NuGet上。要从命令行安装
dotnet add package sourceinject
或使用 Visual Studio 的包管理器。
贡献
开发的主要支持 IDE 是 Visual Studio 2019。
欢迎提问、评论、错误报告和拉取请求。包含重现步骤(包括代码)的错误报告更受欢迎。更好的是,以拉取请求的形式提交。在开始对现有问题进行工作之前,检查它是否尚未分配给任何其他人,如果已经分配,请与那个人交谈。
维护者和核心团队
- Giovanni Bassi,又名Giggio,Lambda3,@giovannibassi
贡献者可以在Github上的贡献者页面找到。
许可证
此软件为开源,许可协议为MIT许可证。有关详细信息,请参阅LICENSE。在贡献、分叉、复制或对代码执行任何操作之前,请查看许可证条款。如果您决定做出贡献,您同意将您所有贡献的版权授予本项目,并同意明确表示不接受这些条款。您的工作将与项目一起以MIT许可证授权,包括其余代码。
本包没有依赖项。
NuGet 包
此包未由任何NuGet包使用。
GitHub 仓库
此包未由任何流行GitHub仓库使用。
版本 | 下载 | 最后更新 |
---|---|---|
0.1.12 | 1,309 | 3/23/2022 |