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 |