分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

asp.net core 依赖注入

发布时间:2023-09-06 02:12责任编辑:顾先生关键词:暂无标签

依赖注入入门 全面理解 ASP.NET Core 依赖注入


参考https://www.cnblogs.com/tcjiaan/p/8732848.html



如何在StartUp中的ConfigureServices方法里直接调用刚刚添加好的注册?

// redis注入
services.AddSingleton<IRedisConnection>(k => { return new RedisConnection(6, Configuration["RedisConnectionString"]); });


方式一.
services.AddSingleton<IConnectionMultiplexer, ConnectionMultiplexer>(x =>
             { return x.GetService<IRedisConnection>().ConnectionMultiplexer; });


方式二           

var sp = services.BuildServiceProvider();
services.AddSingleton<StackExchange.Redis.IConnectionMultiplexer>((x) => { return sp.GetService<IRedisConnection>().ConnectionMultiplexer; });


services.AddScoped<ICacheManager, RedisCacheManager>();



当一个接口被多个不同的类来实现, 我们需要按需调用的时候

比如有一个接口

IFlyProvider{ Fly(); };

俩个实现类

FlyByPlaneProvider{};

FlyByRocketProvider{};



如何配置?

1. 先用断子绝孙法直接注册两个实现类

services.AddTransient<FlyByPlaneProvider>();
services.AddTransient<FlyByRocketProvider>();


2. 注册一个返回 Func<string,IFlyProvider>的项

services.AddTransient<Func<string, IFlyProvider>>(serviceProvider => key =>
{

     if (key == "plane")
          return serviceProvider.GetService<CreateWezhanResponseProvider>();
      else
           return serviceProvider.GetService<FlyByRocketProvider>();

//用到了上面提到的 直接调用刚刚添加好的注册
});


3. 使用

比如, 这里有一个旅游管理  ITravelManager接口, 里面有个方法, FLyToRoma(string key)

那么我们需要在实现类中


public class TravelManager: ITravelManager
     {

        private readonly Func<string, IFlyProvider> _providerAccessor;


        FLyToRoma(string key){

              var provider=_providerAccessor(key);

              provider.Fly();

              …………………

       }

asp.net core 依赖注入

原文地址:https://www.cnblogs.com/jianjialin/p/9543851.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved