首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个ASP项目中使用StructureMap 3

在多个ASP项目中使用StructureMap 3
EN

Stack Overflow用户
提问于 2014-12-11 20:31:15
回答 1查看 375关注 0票数 0

首先,让我们开始描述一下我的项目架构。

我有一个名为Portal.Web的asp.net mvc应用程序作为启动项目,还有多个名为Plugin.XXX (Plugin.News、Plugin.Cms等)的asp.net mvc应用程序,Portal.Web引用了所有这些插件。

我为每个Plugins安装了StrcutureMap.Mvc5

正如您所知道的,当您安装StructureMap时,创建了一个名为DependencyResolution的文件夹,其中包含一些文件,其中一个是IoC.cs,您可以在其中初始化容器。

现在我的问题是,因为所有的插件都有自己的IoC.cs,它们似乎覆盖了彼此的容器,所以最后我得到了这个错误:

代码语言:javascript
复制
No parameterless constructor defined for this object

// inner exception
No default Instance is registered and cannot be automatically determined for type 'Portal.Plugins.Page.Interfaces.IPage'
There is no configuration specified for Portal.Plugins.Page.Interfaces.IPage
1.) new RouteController(*Default of IUnitOfWork*, *Default of IPage*)
2.) Portal.Web.Controllers.RouteController
3.) Instance of Portal.Web.Controllers.RouteController
4.) Container.GetInstance(Portal.Web.Controllers.RouteController)

There is no configuration specified for Portal.Plugins.Page.Interfaces.IPage

我可以在Portal.Web项目中使用一个插件,但我需要保持模块化,并使插件尽可能独立。

有没有办法保持插件容器的独立性?

代码语言:javascript
复制
namespace Portal.Plugins.Account.DependencyResolution {
    using StructureMap;

    public static class IoC {
        public static IContainer Initialize() {
            return new Container(c =>
            {
                c.AddRegistry<DefaultRegistry>();
                c.For<IUnitOfWork>().LifecycleIs(new HttpContextLifecycle()).Use<AccountDbContext>();
                c.For<IAccount>().Use<AccountService>();
            });
        }
    }
}
代码语言:javascript
复制
namespace Portal.Plugins.Cms.DependencyResolution {
    using StructureMap;

    public static class IoC {
        public static IContainer Initialize() {
            return new Container(c =>
            {
                c.AddRegistry<DefaultRegistry>();
                c.For<IUnitOfWork>().LifecycleIs(new HttpContextLifecycle()).Use<CmsDbContext>();
                c.For<IPage>().Use<PageService>();
                c.For<IMenu>().Use<MenuService>();
                c.For<IMedia>().Use<MediaService>();
            });
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-12-11 21:40:17

如果我正确理解了您的问题,您是否可以创建一个DependencyResolution类库,其中包含StructureMap.Mvc5包,然后在您的插件中使用(这将节省包含StructureMap.Mvc5版本的每个插件),并拥有对您的DependencyResolution类库的单一引用。

从这里开始,您的单个插件可以包含它们自己的StructureMap注册表,更多的全局注册表保存在DependencyResolution类库中。

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

https://stackoverflow.com/questions/27422962

复制
相关文章

相似问题

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