首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Unity注入特定的实现

使用Unity注入特定的实现
EN

Stack Overflow用户
提问于 2012-03-10 02:56:23
回答 2查看 1.6K关注 0票数 3

我有两个接口实现,我需要将第一个实现注入到一个服务中,并将第二个实现注入到另一个服务中。每个服务还注入了没有多个实现的其他依赖项。

到目前为止,我有这样的东西:

代码语言:javascript
运行
复制
public FirstService(IDataRepository dr, IOtherRepository or)
{
    this.DataRepository = dr;
    this.OtherRepository = or;
}

public SecondService(IDataRepository dr, IAnotherRepository ar)
{
    this.DataRepository = dr;
    this.OtherRepository = ar;
}

然后在我的bootstrapper中有:

代码语言:javascript
运行
复制
container.RegisterType<IDataRepository, FirstDataRepository>("First");
container.RegisterType<IDataRepository, SecondDataRepository>("Second");
container.RegisterType<IOtherRepository ,OtherRepositor>();
container.RegisterType<IAnotherRepository ,AnotherRepository>();

container.RegisterType<IFirstService, FirstService>(new InjectionConstructor(new ResolvedParameter<IDataRepository>("First")));
container.RegisterType<ISecondService, SecondService>(new InjectionConstructor(new ResolvedParameter<IDataRepository>("Second")));

当我运行我的应用程序时,我得到了错误:"FirstService没有一个接受参数的构造函数(IDataRepository)。“

既然我已经明确指定了应该注入的IOtherRepository实例,那么我还需要指定需要注入的IDataRepository实例吗?还是我做错了什么?

我的实际构造函数有6个参数,仅仅因为其中一个有多个实现,就必须手动注入每个参数,这将是一件痛苦的事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-10 03:34:48

您不必指定其他参数的值,但必须指定它们的Type,以便Unity可以识别要使用的构造函数。

IFirstService的注册将如下所示

代码语言:javascript
运行
复制
container.RegisterType<IFirstService, FirstService>(new InjectionConstructor(new ResolvedParameter<IDataRepository>("First"), typeof(IOtherRepository)));

TecX project on codeplex包含的ClozeInjectionConstructor可以处理这样的情况,即您只想指定一个参数。请参阅TecX.Unity项目中的源代码。

顺便说一句:构造函数的6个参数是constructor over injection anti-pattern的代码气味。

票数 3
EN

Stack Overflow用户

发布于 2012-03-10 03:41:56

代码语言:javascript
运行
复制
container.RegisterType<IFirstService, FirstService>(new InjectionConstructor(new ResolvedParameter<IDataRepository>("First"), new ResolvedParameter<IOtherRepository>()));
container.RegisterType<ISecondService, SecondService>(new InjectionConstructor(new ResolvedParameter<IDataRepository>("Second"), new ResolvedParameter<IAnotherRepository>()));

您需要解析第二个构造函数参数。

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

https://stackoverflow.com/questions/9639470

复制
相关文章

相似问题

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