먼저 프로젝트 아키텍처에 대해 설명해주십시오.
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>();
});
}
}
}