首页 新闻 会员 周边

ioc注入接口对象,怎么得到接口的实现实例对象

0
悬赏园豆:5 [已解决问题] 解决于 2021-11-24 15:10

摇曳de风筝的主页 摇曳de风筝 | 初学一级 | 园豆:193
提问于:2021-11-23 16:55
< >
分享
最佳答案
0
  1. 你可以将实例和接口都注册
ServiceCollection sc; sc.AddSingleton<Test>(); sc.AddSingleton<ITest>(sp=>sp.GetService<Test>()) //通过类似autofac 可以简化这部分代码.
 ServiceProvider.GetService<ITest>()  ==  ServiceProvider.GetService<Test>()  //output true.
  1. 你知道接口的实现是谁, 直接强转
var test = ServiceProvider.GetService<ITest>() as Test
收获园豆:5
czd890 | 专家六级 |园豆:14412 | 2021-11-24 14:50

注册的时候不是应该
sc.AddSingleton<ITest,Test>()

sc.AddSingleton<Test>();
sc.AddSingleton<ITest>(sp=>sp.GetService<Test>())
的效果是一样的吗?

摇曳de风筝 | 园豆:193 (初学一级) | 2021-11-24 17:12

@摇曳de风筝: sc.AddSingleton<ITest,Test>() 只能通过GetService<ITest>获取, 用GetService<Test>是拿不到的

sc.AddSingleton<Test>();
sc.AddSingleton<ITest>(sp=>sp.GetService<Test>())
// test
ServiceProvider.GetService<ITest>()  ==  ServiceProvider.GetService<Test>()  //output true.
czd890 | 园豆:14412 (专家六级) | 2021-11-24 17:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册