如何在 ASP.NET Core 中为同一接口配置不同的实现
生活随笔
收集整理的這篇文章主要介紹了
如何在 ASP.NET Core 中为同一接口配置不同的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
通常,我們使用依賴注入時,一個接口僅對應一種實現,使用時可以直接得到實現類的實例,類似這樣:
services.AddScoped<IServiceA,ServiceA>();public?WeatherForecastController(IServiceA?service)?{?}但是,有時可能需要在同一ASP.NET Core 應用程序中使用同一接口的不同實現。
下面是不同需求下對應的解決方案。
為不同的類型使用不同實現
例如倉儲接口IRepository<>,默認使用EF core訪問關系型數據庫,而對于特定實體(例如訂單Order)使用MONGODB存儲。
可以首先注冊默認實現,再針對特定實體注冊指定實現:
services.AddScoped(typeof(IRepository<>),?typeof(EFCoreRepository<>)); services.AddScoped(typeof(IRepository<Order>),?typeof(MongoRepository<Order>));在不同的Controller中使用不同實現
例如訂單倉儲接口IRepository,默認使用MONGODB存儲,而在報表服務ReportController中訪問ES。
可以針對構造函數注冊指定參數:
services.AddScoped<ESRepository<Order>>(); services.AddScoped(x?=>?new?ReportController(x.GetRequiredService<ESRepository<Order>>()));注意:以上方式需要使用命令將Controller添加為服務才能使用:
services.AddControllers().AddControllersAsServices();結論
關于如何注入同一接口的不同實現,你有什么不同需求或者實現方案,歡迎在公眾號首頁留言交流!
總結
以上是生活随笔為你收集整理的如何在 ASP.NET Core 中为同一接口配置不同的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio怎么使用中文帮
- 下一篇: 同事都说有SQL注入风险,我非说没有