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

C# 使用IoC容器时如何传入对象,c#,asp.net-mvc,ioc-container,C#,Asp.net Mvc,Ioc Container,我正在ASP.NETMVC中做一个项目,我想在其中实现一个IoC容器。我是国际奥委会集装箱的新手,一直在寻找解决我问题的方法,但到目前为止都没有结果 问题是dat数据分布在各种数据库中。用户登录后,将从授权数据库检索该用户的数据库,然后在用户会话中进行设置。在构建服务和存储库时,该用户会话将传递给它们,以便它们可以在需要访问数据库时使用它 典型的裸剥离服务(没有接口和ioc)如下所示: private CompetitionRepository _CompetitionRepo;

我正在ASP.NETMVC中做一个项目,我想在其中实现一个IoC容器。我是国际奥委会集装箱的新手,一直在寻找解决我问题的方法,但到目前为止都没有结果

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

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

    private CompetitionRepository _CompetitionRepo;

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

    public CompetitionService(CompetitionRepository competitionRepo)
    {
        this._CompetitionRepo = competitionRepo;
    }
“DataContext”包含两个属性,通过这些属性可以为会话选择正确的数据库。因为服务和存储库没有访问会话本身的权限(这超出了它们的范围),所以它们需要这个对象

我的问题是,我怎样才能在IoC中设置这样的东西(不管是哪个容器,我只想知道大概的想法)。就我所见,大多数容器不允许对象传入?还是设计根本上有缺陷

据我所知,大多数集装箱 不允许传入对象

那你就看不远了;)我所知道的大多数IoC容器都有这样的能力。您需要根据对象的类型注册对象的实例。如何以及何时构造该对象可能是一个比您所问的问题更深的问题。但是,为了切中要害,您可以对容器执行以下操作:

DataContext context = ..... ;
container.RegisterInstance(context);
每次创建需要DataContext的类的实例时,都会得到已注册的实例。如果要将实例与之关联的类型不同,则可以强制执行以下操作:

container.RegisterInstance<IDataContext>(context);
container.RegisterInstance(上下文);
有关更多信息,请参阅