using Microsoft.Extensions.DependencyInjection;
using System;
namespace 杨中科教程
{
internal class Program
{
static void Main(string[] args)
{
TransientTest();
ScopeTest();
ScopeTest2();
}
public static void TransientTest()
{
ServiceCollection services = new ServiceCollection();
//瞬时
services.AddTransient<Test>();
using (ServiceProvider scope = services.BuildServiceProvider())
{
Test t = scope.GetRequiredService<Test>();
t.SayHi();
Test t1 = scope.GetRequiredService<Test>();
t.SayHi();
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + object.ReferenceEquals(t, t1));
}
string a = "*";
for (int i = 0; i < 100; i++)
{
a = a + "*";
}
Console.WriteLine(a);
}
public static void ScopeTest()
{
ServiceCollection services = new ServiceCollection();
//范围
services.AddScoped<Test>();
using (ServiceProvider scope = services.BuildServiceProvider())
{
Test test2;
using (IServiceScope serviceScope = scope.CreateScope())
{
Test t = serviceScope.ServiceProvider.GetRequiredService<Test>();
t.SayHi();
Test t1 = serviceScope.ServiceProvider.GetRequiredService<Test>();
t.SayHi();
test2 = t1;
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + object.ReferenceEquals(t, t1));
}
using (IServiceScope serviceScope = scope.CreateScope())
{
Test t = serviceScope.ServiceProvider.GetRequiredService<Test>();
t.SayHi();
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + object.ReferenceEquals(t, test2));
}
}
string a = "*";
for (int i = 0; i < 100; i++)
{
a = a + "*";
}
Console.WriteLine(a);
}
public static void ScopeTest2()
{
ServiceCollection services = new ServiceCollection();
//范围
services.AddScoped<Test>();
using (ServiceProvider scope = services.BuildServiceProvider())
{
Test t = scope.GetRequiredService<Test>();
t.SayHi();
Test t1 = scope.GetRequiredService<Test>();
t.SayHi();
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + object.ReferenceEquals(t, t1));
}
string a = "*";
for (int i = 0; i < 100; i++)
{
a = a + "*";
}
Console.WriteLine(a);
}
}
public class Test : ITest,IDisposable
{
string name;
public void Dispose()
{
Console.WriteLine("aaaaa");
}
public void SayHi()
{
Console.WriteLine($"hello,{name}");
}
}
public interface ITest
{
public void SayHi();
}
}
C#依赖注入,服务注册示例
最新推荐文章于 2024-08-26 11:18:02 发布
本文通过示例代码展示了在.NET中使用Microsoft.Extensions.DependencyInjection实现依赖注入时,Transient和Scoped两种服务生命周期的区别。TransientTest部分说明了瞬时服务每次请求都会创建新实例,而ScopeTest则解释了在同一作用域内,Scoped服务只会创建一次实例。
摘要由CSDN通过智能技术生成