EasilyNET.AutoDependencyInjection 3.24.911.95

There is a newer version of this package available.
See the version list below for details.
dotnet add package EasilyNET.AutoDependencyInjection --version 3.24.911.95
                    
NuGet\Install-Package EasilyNET.AutoDependencyInjection -Version 3.24.911.95
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EasilyNET.AutoDependencyInjection" Version="3.24.911.95" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EasilyNET.AutoDependencyInjection" Version="3.24.911.95" />
                    
Directory.Packages.props
<PackageReference Include="EasilyNET.AutoDependencyInjection" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EasilyNET.AutoDependencyInjection --version 3.24.911.95
                    
#r "nuget: EasilyNET.AutoDependencyInjection, 3.24.911.95"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=EasilyNET.AutoDependencyInjection&version=3.24.911.95
                    
Install EasilyNET.AutoDependencyInjection as a Cake Addin
#tool nuget:?package=EasilyNET.AutoDependencyInjection&version=3.24.911.95
                    
Install EasilyNET.AutoDependencyInjection as a Cake Tool
EasilyNET.AutoDependencyInjection
  • 新增KeyedService支持,可在 DependencyInjectionAttribute 中看到对应的 ServiceKey 属性,用于标识服务的 Key 值.
  • 新增 WPF 项目支持,理论上也支持 WinForm 项目,但是没有测试,使用时请注意.(仅限于 .NET 的项目,不支持 .NET Framework)
  • 经测试是支持 WinUI 3 类型的项目的,但是需要注意的是,WinUI 3 项目的启动方式和 WPF 项目不一样,需要自行调整.
中断性变更
  • 移除使用 IScopedDependency, ISingletonDependency, ITransientDependency 接口的方式,仅使用特性注入的方式.保持设计简洁性.
变化

由于新增了 WPF 项目支持,所以在使用时需要注意以下几点: WPF 项目中,使用依赖注入,需要在 App.xaml.cs 中添加如下代码:

[STAThread]
public static void Main(string[] args)
{
    using var host = CreateHostBuilder(args).Build();
    host.InitializeApplication();
    host.Start();
    var app = new App();
    app.InitializeComponent();
    app.MainWindow = host.Services.GetRequiredService<MainWindow>();
    app.MainWindow.Visibility = Visibility.Visible;
    app.Run();
}

private static IHostBuilder CreateHostBuilder(string[] args)
{
    return Host.CreateDefaultBuilder(args)
               .ConfigureServices(sc => { sc.AddApplicationModules<AppServiceModules>(); });
}

同时还需要调整 .csproj 文件,添加如下代码:

<ItemGroup>
	<ApplicationDefinition Remove="App.xaml" />
	<Page Include="App.xaml" />
</ItemGroup>

再在 WPF 项目中,使用依赖注入,需要在 AppServiceModules.cs 中添加如下代码: 该类的使用方法和 Web 项目中的 AppWebModule.cs 一样.

[DependsOn(typeof(DependencyAppModule))]
internal sealed class AppServiceModules : AppModule { }

在 WPF 项目中,使用依赖注入,需要在 MainWindow.xaml.cs 中继承接口或者添加 DependencyInjection 特性如下代码:

// 使用特性配置注入信息
[DependencyInjection(ServiceLifetime.Singleton, AddSelf = true, SelfOnly = true)]
public partial class MainWindow : Window

注意事项
  • 需要注意的是,在 WPF 项目中,请将 AddSelf 属性设置为 true,否则会出现服务无法找到的问题,因为默认会注册实现类的父类,导致使用 host.Services.GetRequiredService<MainWindow>() 的方式无法找到服务.WinForm 项目中,没有测试,但是理论上也是一样的.
  • 由于新增 WPF 项目支持,所以调整了 IApplicationBuilder 为 IHost,因此 WEB 项目中的使用方式有细微的变化.
// 之前的使用方式
IApplicationBuilder app = context.GetApplicationBuilder();
// 现在的使用方式
IApplicationBuilder app = context.GetApplicationHost() as IApplicationBuilder;
// 或者如下方式,根据实际情况选择
WebApplication app = context.GetApplicationHost() as WebApplication;
// 在 WPF 或者 WinForm 项目中,使用如下方式
IHost app = context.GetApplicationHost();
如何使用
  • 使用 Nuget 包管理工具添加依赖包 EasilyNET.AutoDependencyInjection
  • 使用特性注入服务
[DependencyInjection(ServiceLifetime.Singleton, AddSelf = true, SelfOnly = true)]
public class XXXService : IXXXService
{
    // TODO: do something
    Console.WriteLine("使用特性注入服务");
    ...
}
  • 3.继承 AppModule 类,然后显示加入到 AppWebModule 配置中
  • Step1.创建 CorsModule.cs
// 这里以跨域服务注册为例
/// <summary>
/// 配置跨域服务及中间件
/// </summary>
public class CorsModule : AppModule
{
    /// <summary>
    /// 注册和配置服务
    /// </summary>
    /// <param name="context"></param>
    public override void ConfigureServices(ConfigureServicesContext context)
    {
        var config = context.Services.GetConfiguration();
        var allow = config["AllowedHosts"] ?? "*";
        _ = context.Services.AddCors(c => c.AddPolicy("AllowedHosts", s => s.WithOrigins(allow.Split(",")).AllowAnyMethod().AllowAnyHeader()));
    }
    /// <summary>
    /// 注册中间件
    /// </summary>
    /// <param name="context"></param>
    public override void ApplicationInitialization(ApplicationContext context)
    {
        var app = context.GetApplicationBuilder() as IApplicationBuilder;
        _ = app.UseCors("AllowedHosts");
    }
}
  • Step2.创建 AppWebModule.cs
/**
 * 要实现自动注入,一定要在这个地方添加
 */
[DependsOn(
    typeof(DependencyAppModule),
    typeof(CorsModule)
)]
public class AppWebModule : AppModule
{
    /// <summary>
    /// 注册和配置服务
    /// </summary>
    /// <param name="context"></param>
    public override void ConfigureServices(ConfigureServicesContext context)
    {
        base.ConfigureServices(context);
        _ = context.Services.AddHttpContextAccessor();
    }
    /// <summary>
    /// 注册中间件
    /// </summary>
    /// <param name="context"></param>
    public override void ApplicationInitialization(ApplicationContext context)
    {
        base.ApplicationInitialization(context);
        var app = context.GetApplicationBuilder() as IApplicationBuilder;
        _ = app.UseAuthorization();
        // 这里可添加自己的中间件
    }
}
  • Step3.最后再 Program.cs 中添加如下内容.
// Add services to the container.
// 自动注入服务模块
builder.Services.AddApplication<AppWebModule>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) _ = app.UseDeveloperExceptionPage();

// 添加自动化注入的一些中间件.
app.InitializeApplication();

app.MapControllers();

app.Run();
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.25.506.150 136 5/6/2025
4.25.429.162 125 4/29/2025
4.25.429.103 150 4/29/2025
4.25.411.142 138 4/11/2025
4.25.409.92 154 4/9/2025
4.25.403.133 158 4/3/2025
4.25.319.113 153 3/19/2025
4.25.312.103 164 3/12/2025
4.25.227.135 109 2/27/2025
4.25.221.115 99 2/21/2025
4.25.212.95 118 2/12/2025
4.25.211.140 103 2/11/2025
4.25.124.223 101 1/24/2025
4.25.116.110 93 1/16/2025
4.25.115.121 60 1/15/2025
4.25.114.172 75 1/14/2025
4.25.109.111 73 1/9/2025
4.25.108.182 76 1/8/2025
4.25.108.160 73 1/8/2025
4.25.1.1 121 1/1/2025
3.24.1224.141 97 12/24/2024
3.24.1216.116 128 12/16/2024
3.24.1206.100 110 12/6/2024
3.24.1205.171 115 12/5/2024
3.24.1202.150 107 12/2/2024
3.24.1126.231 109 11/26/2024
3.24.1126.172 105 11/26/2024
3.24.1126.114 104 11/26/2024
3.24.1126.104 97 11/26/2024
3.24.1125.181 94 11/25/2024
3.24.1125.104 108 11/25/2024
3.24.1121.183 104 11/21/2024
3.24.1120.183 107 11/20/2024
3.24.1119.31 103 11/18/2024
3.24.1115.143 92 11/15/2024
3.24.1113.100 116 11/13/2024
3.24.1112.125 98 11/12/2024
3.24.1107.140 111 11/7/2024
3.24.1107.54 99 11/7/2024
3.24.1107.34 101 11/7/2024
3.24.1105.111 103 11/5/2024
3.24.1103.31 110 11/2/2024
3.24.1103 104 11/2/2024
3.24.1031.135 110 10/31/2024
3.24.1031.112 104 10/31/2024
3.24.1031.104 108 10/31/2024
3.24.1029.142 113 10/29/2024
3.24.1025.30 109 10/24/2024
3.24.1022.142 92 10/22/2024
3.24.1018.204 160 10/18/2024
3.24.1018.175 151 10/18/2024
3.24.1018.166 150 10/18/2024
3.24.1018.93 164 10/18/2024
3.24.1017.42 124 10/16/2024
3.24.1016.161 124 10/16/2024
3.24.1015.231 114 10/15/2024
3.24.1015.14 100 10/14/2024
3.24.1012.114 102 10/12/2024
3.24.1009.115 109 10/9/2024
3.24.1008.160 107 10/8/2024
3.24.1008.133 107 10/8/2024
3.24.1007.185 112 10/7/2024
3.24.1003.33 112 10/2/2024
3.24.1002.162 110 10/2/2024
3.24.929.143 107 9/29/2024
3.24.929.141 93 9/29/2024
3.24.929.131 110 9/29/2024
3.24.929.122 110 9/29/2024
3.24.926.184 111 9/26/2024
3.24.926.182 100 9/26/2024
3.24.926.175 107 9/26/2024
3.24.924.160 112 9/24/2024
3.24.924.133 118 9/24/2024
3.24.924.124 105 9/24/2024
3.24.924.10 112 9/23/2024
3.24.924.1 102 9/23/2024
3.24.923.234 106 9/23/2024
3.24.923.232 110 9/23/2024
3.24.923.155 114 9/23/2024
3.24.919.92 126 9/19/2024
3.24.914.125 133 9/14/2024
3.24.914.115 114 9/14/2024
3.24.914.111 118 9/14/2024
3.24.911.95 123 9/11/2024
3.24.908.215 110 9/8/2024
3.24.904.200 119 9/4/2024
3.24.828.163 143 8/28/2024
3.24.820.173 125 8/20/2024
3.24.814.92 147 8/14/2024
3.24.812.115 126 8/12/2024
3.24.802.100 82 8/2/2024
3.24.801.162 97 8/1/2024
3.24.801.160 88 8/1/2024
3.24.801.155 90 8/1/2024
3.24.801.153 138 8/1/2024
3.24.730.164 95 7/30/2024
3.24.730.91 91 7/30/2024
3.24.724.91 91 7/24/2024
3.24.718.105 106 7/18/2024
3.24.716.95 149 7/16/2024
3.24.712.94 126 7/12/2024
3.24.710.14 124 7/9/2024
3.24.709.105 130 7/9/2024
3.24.704.94 136 7/4/2024
3.24.701.90 121 7/1/2024
3.24.628.114 127 6/28/2024
3.24.627.145 126 6/27/2024
3.24.620.160 120 6/20/2024
3.24.613.115 113 6/13/2024
3.24.612.95 116 6/12/2024
3.24.528.90 120 5/28/2024
3.24.522.84 134 5/22/2024
3.24.512.213 121 5/12/2024
3.24.508.112 145 5/8/2024
2.2024.428.71 139 4/28/2024
2.2024.427.1128 128 4/27/2024
2.2.72 137 4/14/2024
2.2.71 115 4/12/2024
2.2.8 119 4/26/2024
2.2.6 134 4/10/2024
2.2.5 142 3/26/2024
2.2.4 128 3/25/2024
2.2.3 140 3/24/2024
2.2.2 133 3/21/2024
2.2.1 135 3/20/2024
2.2.0 159 3/13/2024
2.1.9 166 2/21/2024
2.1.8 141 2/18/2024
2.1.7 155 2/16/2024
2.1.6 171 2/14/2024
2.1.5 137 2/14/2024
2.1.4 163 2/9/2024
2.1.3 137 2/8/2024
2.1.2 191 2/5/2024
2.1.1.2 235 12/26/2023
2.1.1.1 134 12/26/2023
2.1.1 146 12/25/2023
2.1.0 163 12/17/2023
2.0.11 207 12/6/2023
2.0.1 208 11/15/2023
2.0.0 160 11/14/2023
1.9.1 174 11/1/2023
1.9.0 146 10/19/2023
1.9.0-preview2 354 10/12/2023
1.9.0-preview1 112 10/12/2023
1.8.9 191 10/11/2023
1.8.8 183 10/11/2023
1.8.7-rc2 144 9/21/2023
1.8.7-rc1 134 9/12/2023
1.8.6 185 8/31/2023
1.8.5 884 8/25/2023
1.8.4 175 8/24/2023
1.8.3 198 8/23/2023
1.8.2 268 8/22/2023
1.8.1 209 8/18/2023
1.8.0 200 8/15/2023
1.7.9 233 8/11/2023
1.7.8 176 8/11/2023
1.7.7 189 8/10/2023
1.7.6 203 8/9/2023
1.7.5 254 8/9/2023
1.7.4 290 8/3/2023
1.7.3 197 8/1/2023
1.7.2 191 7/31/2023
1.7.1 189 7/27/2023
1.7.0 206 7/25/2023
1.6.9 186 7/25/2023
1.6.8 196 7/24/2023
1.6.7 218 7/20/2023
1.6.6 216 7/19/2023
1.6.5 190 7/19/2023
1.6.4 193 7/17/2023
1.6.3 167 7/17/2023
1.6.2 223 7/12/2023
1.6.1 232 6/30/2023
1.6.0 164 6/26/2023
1.5.9 179 6/22/2023
1.5.8 188 6/15/2023
1.5.7.1 188 6/14/2023
1.5.7 185 6/14/2023
1.5.6.2 241 6/7/2023
1.5.6.1 169 6/7/2023
1.5.6 169 6/7/2023
1.5.5.2 228 5/26/2023
1.5.5.1 187 5/26/2023
1.5.5 185 5/26/2023
1.5.4.4 198 5/25/2023
1.5.4.3 241 5/23/2023
1.5.4.2 307 5/17/2023
1.5.4.1 197 5/16/2023
1.5.4 273 5/11/2023
1.5.3 194 5/11/2023
1.5.2 137 5/10/2023
1.5.1 135 5/10/2023
1.5.0 178 5/6/2023
1.4.0 133 5/5/2023
1.3.9 144 4/23/2023
1.3.8.6 127 4/23/2023
1.3.8.5 136 4/21/2023
1.3.8.1 202 4/12/2023
1.3.8 142 4/11/2023
1.3.7 168 4/9/2023
1.3.6.3 224 4/1/2023
1.3.6.2 140 3/31/2023
1.3.6.1 141 3/31/2023
1.3.6 114 3/31/2023
1.3.5 138 3/30/2023
1.3.4.1 201 3/29/2023
1.3.4 147 3/28/2023
1.3.3 123 3/28/2023
1.3.2 157 3/26/2023
1.3.1 210 3/22/2023
1.3.0 149 3/21/2023
1.2.0 135 3/21/2023
1.1.0 149 3/17/2023
1.0.9 145 3/15/2023
1.0.8 148 3/15/2023
1.0.7 126 3/15/2023
1.0.6 145 3/13/2023
1.0.5 150 3/13/2023
1.0.4 126 3/13/2023
1.0.3 216 2/26/2023
1.0.2 136 2/26/2023
1.0.1 148 2/23/2023
1.0.0 307 2/20/2023