首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Zenject注入带有接口的实现

使用Zenject注入带有接口的实现
EN

Stack Overflow用户
提问于 2020-12-09 15:06:27
回答 1查看 1.2K关注 0票数 0

我正在尝试在Unity中使用Zenject。我有一个接口和它的几个实现。

我希望注入ID,但同时也希望实现具有tick接口,因为它不是MonoBehaviour。

所以我有一个IAttacker接口和一个MeleeAttackImpl实现。

代码语言:javascript
复制
Container.Bind<IAttacker>().WithId(AttackerTypeEnum.MELEEE).To<MeleeAttackImpl>().AsTransient();

我想补充的是

代码语言:javascript
复制
Container.BindInterfacesTo<MeleeAttackImpl>().AsTransient();

但它创建了两个不同的对象,而不是具有Tick接口的实例,并将它们绑定到IAttacker

EN

回答 1

Stack Overflow用户

发布于 2020-12-09 16:08:30

如果要将接口绑定到已确定的实现,为什么要使用两个绑定?如果只需要该对象的一个实例,我会尝试:Container.BindInterfacesAndSelfTo<MeleeAttackImpl>().AsSingle();或:Container.Bind<IAttacker>().To<MeleeAttackImpl>().AsSingle();

As Single()在这种情况下,您需要从应用程序的容器中提供相同的实例(就像一个单例)。

文档中写道:"AsTransient -根本不会重用实例。每次请求ContractType时,DiContainer都会再次执行给定的构造方法。“

很多时候,意图是在绑定本身中创建的。因此,可能会从两个绑定创建两个实例,每个绑定一个实例。

如果您需要动态创建实例并解决其所有依赖项,那么您需要的是Factory。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65212102

复制
相关文章

相似问题

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