0
点赞
收藏
分享

微信扫一扫

C#依赖注入,服务注册示例


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++的依赖注入

依赖注入

0 条评论