標籤:builds ges 配置 build manager transient read string Plan
依賴注入入門 全面理解 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 依賴注入