【发布时间】:2013-06-04 16:52:00
【问题描述】:
我正在尝试在我的新项目中从 Unity 迁移到 Simple Injector。它比 Unity 快得多,我不得不试一试。我有一些颠簸,但没有什么是我无法解决的。但是我用“按键查找”打了另一个
我已阅读this,其中简单注入器的创建者表示他认为您不需要为每个接口解析多个类。
我一定是个差劲的程序员,因为我已经用 Unity(它很好地支持它)做到了这一点,并且想在我当前的项目中做到这一点。
我的情况是我有一个 IRepository 接口。我有两个单独的存储库,我想使用 IRepository 接口进行抽象。像这样:
container.Register<FirstData>(() => new FirstData());
container.Register<IRepository>(
() => new GenericRepository(container.GetInstance<FirstData>()));
container.Register<SecondEntities>(() => new SecondEntities());
container.Register<IRepository>(
() => new GenericRepository(container.GetInstance<SecondData>()));
IRepository/GenericRepository 是一种相当常见的抽象,但在 SimpleInjector 中只能有一个
在 Unity 中,我可以注册我的两个存储库,然后设置我的构造函数注入来注入我需要的实例。这是使用实例的密钥完成的。 (我不需要在我的正常代码中调用Resolve,也不需要在我的设置之外添加对 Unity 的依赖。)
使用简单的注射器,这是行不通的。但是,无论好坏,Simple Injector 的所有者都认为这个功能是个坏主意。
注意:作者的“应用内”系统看起来使用字符串键进行查找,但每次仍需要不同的类(DefaultRequestHandler、OrdersRequestHandler 和CustomersRequestHandler)。 我只有一个 GenericRepostory,它允许我抽象我的存储库方法,无论我连接到什么。
我想我可以在每次想要实例化它时继承我的GenericRepostory。或者让它采用我不需要的随机类型参数。但这混淆了我的设计,所以我希望有另一种方法来做到这一点。
那么有没有什么变通办法不让我创建虚假类型来区分我的两个 IRepository/GenericRepository 实例?
【问题讨论】:
-
你能展示依赖于 IRepository 抽象的类或注册吗?我不清楚你想如何使用这些存储库。
标签: c# .net simple-injector