IOC在表示层中的服务层和服务中注册存储库

时间:2010-01-05 11:52:18

标签: c# asp.net-mvc structuremap

我正在使用structuremap在控制器中注册服务,我也需要在服务中注册存储库。我将如何做到这一点,因为他们是2个不同的项目,需要完全相同的IOC注册。实际上我在表示层使用它并在控制器中注入服务。 我需要知道一个很好的实践方法,使用相同的IOC容器,在两个项目中注入。

2 个答案:

答案 0 :(得分:5)

将IOC容器和任何共享服务实现放入另外两个引用的第三个项目(类库)中。

答案 1 :(得分:0)

我倾向于为每个项目保留一个StructureMap注册表,以便他们可以处理自己的配置。然后我的主项目添加对每个依赖项的引用。在我的主要内容中,我通常有一个bootstrapper类,负责创建和配置容器。 (尽可能避免使用静态ObjectFactory。)

    public class ApplicationBootstraper
{
    public IContainer Container { get; set; }

    public ApplicationBootstraper()
    {
        Container = new Container(x=>
        {
            x.AddRegistry<SettingsRegistry>();
            x.AddRegistry<ProjectRegistry>();

            //more registries go here or application specific configuration.
        });
    }
}

关于让项目依赖于另一个可识别StructureMap的项目。版本2.5.4增加了在当前注册表中包含另一个注册表的功能。

例如,我有一个“Common”项目,我需要依赖它,我可以执行以下操作:

    public class ProjectRegistry : Registry
{
    public ProjectRegistry()
    {
        IncludeRegistry<CommonsRegistry>();

        Scan(scan =>
        {
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
        });
    }
}

希望这有帮助。