首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >统一IoC -解决命名依赖的不同路径

统一IoC -解决命名依赖的不同路径
EN

Stack Overflow用户
提问于 2013-08-12 16:39:21
回答 2查看 1.2K关注 0票数 1

我不知道如何使命名依赖与统一,以遵循不同的解决途径。所以如果我有

代码语言:javascript
运行
复制
public interface IService
{
    SomeMethod();
}

public class Service : IService
{
    private readonly IRepository repository;
    public Service(IRepository repository)
    {
    this.repository = repository;
    }
    public SomeMethod 
    { 
        //some implementation here
    }
}

在我的下面有一个仓库: IRepository,NHibernateContext : INHibernateContext,ISession等等。

我的问题是,如果我在我的Global.asax做下一步:

代码语言:javascript
运行
复制
container.RegisterType<IService, Service>("GlobalContext");

然后,如何使它在“NHibernateContext”路径(不使用默认注册类型)中注入GlobalContext(或其他层次依赖关系)?

非常感谢你帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 10:36:36

过了很长一段时间,我在其他项目上也有了类似的需求,但我使用的是温莎城堡。按照我现在的做法,我需要在某些应用程序路径中使用不同的依赖解决方案,我将使用一个子容器。

  1. 创建一个子容器,并注册具有不同分辨率的依赖项
  2. 将子容器本身注册为命名实例。
  3. 在入口点(在我的例子中是控制器工厂),检查是否需要通过父容器或子容器来解析。如果需要,解析子容器并使用它解析层次结构链。如果子容器中不存在注册,则将使用父依赖解析器。
票数 0
EN

Stack Overflow用户

发布于 2013-08-14 21:16:53

当使用这样的命名注册,你不能再依赖于自动布线,所以你需要对你的注册更加具体。所以假设你有这些:

代码语言:javascript
运行
复制
container.RegisterType<INHibernateContext, NHibernateContext>("GlobalContext");
container.RegisterType<ISession, NHibernateSession>("GlobalContext");

当您解析IRepository时,"GlobalContext“需要注入这些特定的依赖项。假设您有一个接受这两个参数的构造函数,您可以显式地告诉容器要使用哪个名称:

代码语言:javascript
运行
复制
container.RegisterType<IRepository, Repository>("GlobalContext",
    new InjectionConstructor(
        new ResolvedParameter<INHibernateContext>("GlobalContext"),
        new ResolvedParameter<ISession>("GlobalContext")
    )
);

这告诉容器使用接受INHibernateContext和ISession的构造函数,通过容器解析这些参数,并在解析它们时使用GlobalContext名称。

同样,要连接您的服务:

代码语言:javascript
运行
复制
container.RegisterType<IService, Service>("GlobalContext",
    new ResolvedParameter<IRepository>("GlobalContext")
);

最后的决心是:

代码语言:javascript
运行
复制
container.Resolve<IService>("GlobalContext");

应该以你想要的方式构建你的对象图。

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

https://stackoverflow.com/questions/18192254

复制
相关文章

相似问题

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