首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有其他方法可以注册实现,使其可以被任何派生接口注入?

有没有其他方法可以注册实现,使其可以被任何派生接口注入?
EN

Stack Overflow用户
提问于 2020-11-18 21:41:12
回答 1查看 35关注 0票数 0

我使用的是默认的ASP.NET核心DI容器

我的层次结构:

代码语言:javascript
复制
interface IRepo<T> where T : Entity;  - (CRUD)
interface ICarRepo : IRepo<Car>;   - (CRUD + more specific actions)
class CarRepo : ICarRepo; - impl

Startup.cs

代码语言:javascript
复制
service.addtransient<ICarRepo, CarRepo>();

所以有时候我可以直接向IoC-container请求ICarRepo并得到它。

但是,如果我想通过请求IRepo<Car>来获得CarRepo,我应该如何注册我的依赖项呢?

我知道该怎么做:

代码语言:javascript
复制
service.addtransient<ICarRepo, CarRepo>();
service.addtransient<IRepo<Car>, CarRepo>();

但这看起来并不是最好的方式

EN

回答 1

Stack Overflow用户

发布于 2020-11-18 21:58:19

正如您所描述的

代码语言:javascript
复制
service.addtransient<ICarRepo, CarRepo>();
service.addtransient<IRepo<Car>, CarRepo>();

就是这样做的一种方式。因为它是暂时的,所以每次都会生成一个新的实例并不重要。虽然你也可以在这里使用“转发”风格。

当试图确保为singletonscoped服务返回相同的实例时,就会变得更加棘手。在这种情况下,您需要转发工厂方法。

代码语言:javascript
复制
services.AddSingleton<Foo>();
services.AddSingleton<IFoo>(x => x.GetRequiredService<Foo>());

更详细的解释可以在this blog article上找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64894234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档