laravel为同一类注入2个不同实例

laravel为同一类注入2个不同实例,laravel,dependency-injection,Laravel,Dependency Injection,在我的laravel应用程序中,我有一个类,它需要两个相同类型的不同实现实例。 即, 我有一个使用我的存储库的控制器 Class MyController { public __construct(MyRepository $repository) {....} } 我正在使用的存储库 Class MyRepositoryImpl implements MyRepository { public __construct(MyDataModel

在我的laravel应用程序中,我有一个类,它需要两个相同类型的不同实现实例。 即, 我有一个使用我的存储库的控制器

    Class MyController
    {
     public __construct(MyRepository $repository)
       {....}
    }
我正在使用的存储库

Class MyRepositoryImpl implements MyRepository
{
 public __construct(MyDataModel $impl1,MyDataModel $impl2)
 {.....}
}
我有一个接口
MyDataModelImpl1
MyDataModelImpl2

Class MyDataModelImpl1 implements MyDataModel
{
}

Class MyDataModelImpl2 implements MyDataModel
{
}

如何将
MyDataModelImpl1
MyDataModelImpl2
注入
MyRepositoryImpl

这可能是一个迹象,表明您的类做了超出预期的更多工作。将使用同一契约的不同实现的两个依赖项注入同一个类听起来像是糟糕的设计。请发布您的代码。存储库模式如何。?一种在同一类型的多个实现上运行的模式。作为旁注,Laravel的服务容器提供了一种方法,用于指定在暗示某个类型的契约时要将哪个实现注入类中。但正如您所期望的,它允许您绑定一个实现,因为这是实现这一点的逻辑方法。因此,在您的情况下,它将是:
$this->app->when('Class3')->needs('Interface1')->give('Implementation1')。我认为您可能以错误的方式实现了存储库模式,这就是为什么我问您是否可以共享您的代码。针对接口实现的想法是,注入依赖项的类不应该关心特定的实现,而应该遵守通过契约(接口)指定的规则。如果您试图确定注入了哪个实现(通过尝试使用两个实现来确定),则意味着您违反了该规则。