设为首页 加入收藏

TOP

.NET Core下自带容器IServiceCollection以及AutoFac以及AutoFac中AOP简介(一)
2019-09-23 11:16:30 】 浏览:72
Tags:.NET Core 自带 容器 IServiceCollection 以及 AutoFac AOP 简介

https://www.cnblogs.com/artech/p/net-core-di-01.html 大内老A的在.NET Core下对这些的介绍,有一系列文章

https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html

https://www.cnblogs.com/artech/p/dependency-injection-in-asp-net-core.html

https://www.zybuluo.com/dasajia2lang/note/1481011

下面开始

在上一篇的笔记中,在.NET Freamwork中,有一个第三方容器Unity,可以实现注入,但是在.NET Core里面,有一个IServiceCollection,这个是.NET Core框架自带的一个容器,和Unity很相似,都是个容器。

下面我们新建一个控制台程序,在控制台程序中,对IServiceCollection的使用做介绍。

下面代码,是本次实例中需要注入的类型,需要用的倒是再点开来看吧

namespace Bingle.Core.Interface
{
    public interface ITestServiceA
    {
        void Show();
    }
}
namespace Bingle.Core.Service
{
    public class TestServiceA : ITestServiceA
    {
        public void Show()
        {
            Console.WriteLine("A123456");
        }
    }
}

namespace Bingle.Core.Interface
{
    public interface ITestServiceB
    {
        void Show();
    }
}

namespace Bingle.Core.Service
{
    public class TestServiceB : ITestServiceB
    {
        
        public TestServiceB(ITestServiceA iTestService)
        {
          
        }


        public void Show()
        { 
            Console.WriteLine($"This is TestServiceB B123456");
        }
    }
}


namespace Bingle.Core.Interface
{
    public interface ITestServiceC
    {
        void Show();
    }
}

namespace Bingle.Core.Service
{
    public class TestServiceC : ITestServiceC
    {
        public TestServiceC(ITestServiceB iTestServiceB)
        {
        }
        public void Show()
        {
            Console.WriteLine("C123456");
        }
    }
}

namespace Bingle.Core.Interface
{
    public interface ITestServiceD
    {
        void Show();
    }
}

namespace Bingle.Core.Service
{
    public class TestServiceD : ITestServiceD
    {
        public void Show()
        {
            Console.WriteLine("D123456");
        }
    }
}
View Code

需要通过Nuget包,把IServiceCollection依赖的dll文件进入进来

Microsoft.Extensions.DependencyInjection

使用容器的三部曲:实例化一个容器、注册、获取服务

 IServiceCollection container = new ServiceCollection();
 // IServiceCollection
 container.AddTransient<ITestServiceA, TestServiceA>();  // 瞬时生命周期  每一次获取的对象都是新的对象
 container.AddSingleton<ITestServiceB, TestServiceB>(); // 单例生命周期  在容器中永远只有当前这一个
 container.AddScoped<ITestServiceC, TestServiceC>();    //当前请求作用域内  只有当前这个实例

 container.AddSingleton<ITestServiceD>(new TestServiceD());  // 也是单例生命周期

 ServiceProvider provider = container.BuildServiceProvider();

 ITestServiceA testA = provider.GetService<ITestServiceA>();
 ITestServiceA testA1 = provider.GetService<ITestServiceA>();
 Console.WriteLine(object.ReferenceEquals(testA, testA1));

 ITestServiceB testB = provider.GetService<ITestServiceB>();
 ITestServiceB testB1 = provider.GetService<ITestServiceB>();
 Console.WriteLine(object.ReferenceEquals(testB, testB1));
  
 ITestServiceC testC = provider.GetService<ITestServiceC>();
 ITestServiceC testC1 = provider.GetService<ITestServiceC>();
 Console.WriteLine(object.ReferenceEquals(testC, testC1));
  
 IServiceScope scope = provider.CreateScope();
 ITestServiceC testc3 = provider.GetService<ITestServiceC>();
 var testc4 = scope.ServiceProvider.GetService<ITestServiceC>();
 Console.WriteLine(object.ReferenceEquals(testc3, testc4));
  
 ITestServiceD testD = provider.GetService<ITestServiceD>
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇表达式树练习实践:C# 循环与循环.. 下一篇表达式树练习实践:入门基础

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目