c# - 用于依赖注入的 ASP.NET Core 多重实现
问题描述
有没有办法可以使用 ASP.NET Core 指定单个接口的多个实现?我可以在 Ninject 中这样做:
ninjectKernel.Bind<DbContext>().To<OracleDbContext>().Named("UnitWork");
ninjectKernel.Bind<DbContext>().To<AppsDbContext>().Named("AppsWork");
解决方案
如果您的问题是特定的,DbContext
那么使用以下语句很容易
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<OracleDbContext>(builder => builder.UseSqlServer(connectionString));
services.AddDbContext<AppsDbContext>(builder => builder.UseSqlServer(connectionString));
}
如果您的问题与通用接口有关,那么只有当它是通用接口时才有可能。假设您有一个如下所示的界面:
public interface IRepository<T>
{
}
以及多种实现,例如:
public class GenericRepository<User> : IRepository<User>
{
}
public class GenericRepository<Order> : IRepository<Order>
{
}
您只需要一行即可注册多个实现。
public void ConfigureServices(IServiceCollection services)
{
// you can register them with any life time like that e.g. Singleton, Transient
services.AddScoped(typeof(IRepository<>), typeof(GenericRepository<>));
}
我希望这有帮助
推荐阅读
- c# - HTML 到图像 - 垂直文本
- javascript - 邮递员能够发送 POST 请求但不能发送我的前端代码
- twitter-bootstrap - 使用 JSF 扩展面板的最佳方式是什么?
- android - 我可以删除什么以使空片段看起来“更干净”
- mysql - 如何在 MySQL 8 的 my.cnf 中设置 sql_mode?
- javascript - 尝试使用 vuejs 表解决性能问题
- angular - 合并连续 Observables 结果的最佳方法是什么?
- c++ - cmake中qt对象的链接
- git - VS 2017 中正在进行 rebase 操作
- java - 值 STRING_TOO_LARGE 类型