我正在尝试在我的新项目中从 Unity 迁移到 Simple Injector。它比 Unity 快得多,我不得不试一试。我有一些颠簸,但没有什么是我无法解决的。但是我用“按键查找”击中了另一个
我读过这篇文章,简单注入器的创建者表示他相信每个接口不需要解析多个类。
我一定是个差劲的程序员,因为我已经用 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 实例?