首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOC/Autofac容器

IOC/Autofac容器
EN

Stack Overflow用户
提问于 2010-01-08 23:51:17
回答 1查看 1.2K关注 0票数 2

我目前正在使用Autofac,但我也对其他IOC容器的评论持开放态度。如果可能的话,我更喜欢使用Autofac的解决方案。我对IOC也有些陌生,所以我可能严重误解了我应该使用IOC容器做什么。

基本上,情况是这样的:

我的应用程序有一个最顶层的IOC容器。我有一个子容器/作用域的树,我希望相同的“服务”(IWhatever)根据它在树中的哪个级别进行不同的解析。此外,如果服务没有在树中的某个级别注册,我希望向上遍历该树,直到找到合适的实现。

此外,在构造给定组件时,我很可能需要访问父容器/作用域。在许多情况下,我注册的组件将依赖于父作用域中相同或不同的服务。

有没有办法用Autofac来表达这种依赖关系?类似于:

代码语言:javascript
复制
builder.Register(c=>
{
   var parentComponent = ?.Resolve<ISomeService>();
   var childComponent = new ConcreteService(parentComponent, args...);
   return childComponent;
}).As<ISomeService>();

由于以下几个原因,我无法获得与上面的伪代码类似的代码:

A)似乎作用域树中的所有级别都共享一组公共的注册。我似乎找不到一种方法来将给定的注册限制在特定的“范围”内。

B)我似乎找不到一种方法来获得给定作用域的父作用域。我可以在容器中解析ILifetimeScope,然后将其转换为一个具体的LifetimeScope实例,该实例提供了其父作用域,但我猜它可能就是这样使用的。这个安全吗?

C)我不确定如何告诉Autofac哪个容器拥有解析的对象。对于许多组件,我希望组件由构造它的作用域“拥有”。带标签的上下文对我有帮助吗?我是否必须用唯一的标记标记树的每一层?这将是困难的,因为树深度是在运行时确定的。

很抱歉问了这么长的问题。总而言之:

1)有没有办法用Autofac做我想做的事?

2)有没有更适合这种依赖结构的容器?

3) IOC是不是完全错误的工具?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-09 06:19:12

Autofac 1.4很容易支持这一点,可能是现在最好的选择。您可以简单地在子容器中注册子容器组件。

您正在使用的Autofac 2还没有一个简单的等价物,尽管它正在研究中。

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

https://stackoverflow.com/questions/2028726

复制
相关文章

相似问题

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