0

먼저 프로젝트 아키텍처에 대해 설명해주십시오.
Plugin.XXX (Plugin.News, Plugin.Cms 등)을 호출하고 여러 개의 asp.net mvc 응용 프로그램 (Portal.Web)을 호출하고 Portal.Web에는이 모든 플러그인의 참조가있는 asp.net mvc 응용 프로그램이 있습니다. 당신은 폴더를 DependencyResolution라고 만든 StructureMap를 설치하고 일부 파일, 그 중 하나는 당신이 당신의 컨테이너를 초기화 할 수 IoC.cs입니다 포함되어있는 경우
나는, 당신도 알다시피이 Plugins
의 각각에 대해 StrcutureMap.Mvc5를 설치했습니다. 모든 플러그인이 자신의 IoC.cs이 있기 때문에
지금 내 문제는 말에 나는이 오류를 얻을 수 있도록 서로 용기를 오버라이드 (override)처럼 보인다입니다 :여러 ASP MVC 프로젝트에서 StructureMap 3 사용

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 프로젝트 ONE IoC.cs을 사용할 수를하지만 필요 모듈성을 유지하고 가능한 한 플러그인을 독립적으로 만듭니다.
플러그인 컨테이너를 독립적으로 유지할 수있는 방법이 있습니까? 내가 제대로 문제를 이해한다면

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>(); 
      }); 
     } 
    } 
} 


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>(); 
      }); 
     } 
    } 
} 

답변

0

, 당신은 다음 플러그인에서 사용되는 년대 StructureMap.Mvc5 패키지를 (이 각각 저장이 포함 된 DependencyResolution 클래스 라이브러리를 만들 수 없습니다 StructureMap.Mvc5 버전이 포함 된 플러그인) 및 DependencyResolution 클래스 라이브러리에 대한 단일 참조가 있어야합니다.

여기서 개별 플러그인은 자신의 StructureMap 레지스트리를 포함 할 수 있으며 더 많은 글로벌 레지스트리가 DependencyResolution 클래스 라이브러리에 보관됩니다.