首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多个项目中使用简单注入器并传递以解决依赖关系

如何在多个项目中使用简单注入器并传递以解决依赖关系
EN

Stack Overflow用户
提问于 2017-12-06 12:34:47
回答 1查看 539关注 0票数 1

我的解决方案中有4个项目: 1. MyApp.UI (MVC) 2. MyApp.Core (ClassLibrary) 3. MyApp.Data (带有EF实现的ClassLibrary)和4. MyApp.Tests

在我的数据项目中,我有4个存储库实现,所有4个存储库都实现了IRepositoryBase接口和它们自己的存储库接口示例,

代码语言:javascript
复制
public class RepositoryA: IRepositoryBase, IRepositoryA
{
.....
}
public class RepositoryB: IRepositoryBase, IRepositoryB
{
.....
}

现在,在我的数据项目中,我想创建抽象存储库工厂,它返回相应存储库接口的具体实现,这个类仅用于MyApp.Data项目,例如,RepositoryFactory.GetRepository<IRepositoryA>()必须返回RepositoryA类的实例,或者RepositoryFactory.GetRepository<IRepositoryB>()必须返回RepositoryB类的实例

我担心的是,

  1. 我怎么能做到这一点?我希望使用RepositoryFactory只在MyApp.Data项目中获得存储库实现。
  2. 由于我的UI (MVC)应用程序已经在执行引导带,所以我需要将容器传递给MyApp.Data项目还是数据项目需要自己的容器注册逻辑?
  3. 我还想单独测试我的MyApp.Data项目(不依赖UI项目)。

如果可能的话,请给出这个场景的工作代码。

提前谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-08 06:57:31

针对这个问题,我找到了一个使用AbstractFactory模式与简单注入器容器类结合使用的解决方案。

我仍不确定这是否是解决这个问题的适当办法。

  1. DataRepositoryFactory实现, //抽象数据存储库工厂公共接口IDataRepositoryFactory {T GetDataRepository()其中T: IDataRepository;}公共类DataRepositoryFactory : IDataRepositoryFactory {T IDataRepositoryFactory.GetDataRepository() {返回(T)DataBootStraper .DataDIContainer .GetInstance(typeof(T));}
  2. 在MyApp.Data项目中,我创建了静态引导类,用于注册数据层依赖项。 公共静态类DataBootStraper {公共静态空(容器容器){ container.Register();container.Register();container.Register();//也向容器container.Register();}}

因此,这可以从我的单元测试用例以及UI引导程序中调用。

  1. 下面是工厂使用的示例 公共类DataRepositoryFactoryTest {私有只读IDataRepositoryFactory _repositoryFactory;公共_repositoryFactory.GetDataRepository().GetEntities();repositoryFactory) { _repositoryFactory = repositoryFactory;}公共IEnumerable GetEntitiesFromRepoA() {返回_repositoryFactory.GetDataRepository().GetEntities();}公共IEnumerable GetEntitiesFromRepoB() {返回_repositoryFactory.GetDataRepository().GetEntities();}公共IEnumerable GetEntitiesFromRepoC() {返回_repositoryFactory.GetDataRepository().GetEntities();}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47674433

复制
相关文章

相似问题

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