如何在使用IoC容器时传入对象

时间:2011-03-08 09:52:36

标签: c# asp.net-mvc ioc-container

我正在ASP.NET MVC中做一个项目,我想在其中实现一个IoC容器。我是IoC容器的新手,一直在寻找解决问题的方法,但到目前为止无济于事。

问题是dat数据分布在各种数据库中。用户登录后,将从授权数据库中检索用户的数据库,然后在用户会话中进行设置。该用户会话在构造时会传递给服务和存储库,因此他们可以在需要它时访问数据库。

典型的裸剥离服务(没有接口和ioc)如下所示:

    private CompetitionRepository _CompetitionRepo;

    public CompetitionService(DataContext dataContext)
        : this (new CompetitionRepository(dataContext))
    { }

    public CompetitionService(CompetitionRepository competitionRepo)
    {
        this._CompetitionRepo = competitionRepo;
    }

“DataContext”包含一些属性,使用这些属性为会话选择正确的数据库。由于服务和存储库无权访问会话本身(超出其范围),因此需要此对象。

我的问题是,如何在IoC中设置这样的东西(无论哪个容器,我只是想知道一般的想法)。据我所知,大多数容器不允许传入对象?或者设计是否存在根本缺陷?

1 个答案:

答案 0 :(得分:2)

  

据我所知,大多数容器   不允许传入对象?

你看不出远;)我知道的大多数IoC容器都有能力做到这一点。您需要根据其类型注册对象的实例。如何以及何时构建该对象可能比您提出的问题更深层次。但是,为了达到这一点,您可以使用Unity容器执行类似的操作:

DataContext context = ..... ;
container.RegisterInstance(context);

每次创建需要DataContext的类的实例时,您将获得已注册的实例。如果要与实例关联的类型不同,则可以强制它:

container.RegisterInstance<IDataContext>(context);

有关详细信息,请选择look here