2009-12-28 2 views
0

테스트하는 동안이 오류가 계속 발생합니다. 나는 RoleRepository를 반환해야하는 IRoleRepository의 인스턴스를 생성 할 수도 없다. 여기 StructureMap 구성 아니오 플러그인 정의 예외 코드 202

오류입니다 :

TestCase에 'EStudy.Repository.Tests.when_fetching_instance_of_role_repository_using_structuremap.should_fetch_successfully' 실패 StructureMap.StructureMapException : StructureMap 예외 코드 : PluginFamily EStudy.Domain.Model에 대해 정의 (202) 아니오 기본 인스턴스. Model.EStudyModelDataContext, EStudy.Domain.Model, 버전 = 1.0.0.0, Culture = 중립, PublicKeyToken = null 에 StructureMap.BuildSession. StructureMap.Pipeline.ConfiguredInstanceBase 1.StructureMap.Pipeline.IConfiguredInstance.GetChild(String propertyName, Type pluginType, BuildSession buildSession) at EStudyDomainModelRepositoriesRoleRepositoryInstanceBuilder4c713d65fe464f4792cd90352224a54b.BuildInstance(IConfiguredInstance , BuildSession) at StructureMap.Pipeline.ConfiguredInstanceBase 1.StructureMap.Pipeline.IConfiguredInstance.Build에서 StructureMap.Util.Cache 2.get_Item(KEY key) at StructureMap.BuildSession.CreateInstance(Type pluginType) at StructureMap.Pipeline.DefaultInstance.build(Type pluginType, BuildSession session) at StructureMap.Pipeline.Instance.createRawObject(Type pluginType, BuildSession session) at StructureMap.Pipeline.Instance.Build(Type pluginType, BuildSession session) at StructureMap.Pipeline.ConfiguredInstanceBase 1.getChild에서 < .ctor> b__0 (T 형) (문자열 propertyName 형식, 유형 pluginType이, BuildSession buildSession) (유형 pluginType이 , StructureMap.Container.GetInstance에서 StructureMap.BuildSession.CreateInstance에서 StructureMap.Pipeline.ConfiguredInstanceBase 1.build(Type pluginType, BuildSession session) at StructureMap.Pipeline.Instance.createRawObject(Type pluginType, BuildSession session) at StructureMap.Pipeline.Instance.Build(Type pluginType, BuildSession session) at StructureMap.Pipeline.BuildPolicy.Build(BuildSession buildSession, Type pluginType, Instance instance) at StructureMap.InstanceFactory.Build(BuildSession session, Instance instance) at StructureMap.BuildSession.CreateInstance(Type pluginType, Instance instance) at StructureMap.BuildSession.<.ctor>b__0(Type t) at StructureMap.Util.Cache 2.get_Item (KEY 키) (유형 pluginType이) (유형 pluginType이) StructureMap.Container에서 에서 BuildSession 세션, InstanceBuilder 빌더) . GetInstanceT at StructureMap.ObjectFactory.GetInstancePLUGINTYPE C : \ Projects \ EStudyVS2008 \ EStudySoltution \ EStudy.Repository.Tests \ Te st_StructureMapConfiguration.cs (41,0) : EStudy.Repository.Tests.when_fetching_instance_of_role_repository_using_structuremap.should_fetch_successfully에서()

[TestFixture] 
    public class when_fetching_instance_of_estudy_data_context_using_structuremap : BaseTest 
    { 

     [Test] 
     public void should_fetch_successfully() 
     { 
      Assert.IsNotNull(ObjectFactory.GetInstance<EStudyModelDataContext>()); 
     } 
    } 

BaseTest: 

public class BaseTest 
    { 
     private TransactionScope _scope; 

     static BaseTest() 
     { 
      EStudy.Domain.Model.Configuration.StructureMapConfiguration.Configure(); 
     } 

And here is the StructureMapConfiguration.Configure method; 

public class StructureMapConfiguration 
    { 
     public static void Configure() 
     { 
      ObjectFactory.Initialize(InitializeStructureMap); 

      ObjectFactory.Initialize(j => 
      { 
       j.ForRequestedType<EStudyModelDataContext>().TheDefault.Is.OfConcreteType<EStudyModelDataContext>().WithCtorArg("connection") 
        .EqualTo(ConfigurationManager.ConnectionStrings["EStudyTestDatabaseEntities"].ConnectionString); 

      }); 
     } 

     public static void InitializeStructureMap(IInitializationExpression x) 
     { 
      x.Scan(y => 
         { 
          y.Assembly("EStudySoltution.EStudy.Domain.Model"); 
          y.With<DefaultConventionScanner>(); 
         } 

       ); 





     } 

답변

2

당신은 초기화를 (호출해서는 안) 두 번 이상. 문서에서 :

"Initialize()에 대한 연속적인 호출은 효과적으로 모든 기존 구성을 지우고 효과적으로 컨테이너를 다시 시작합니다."

기존 컨테이너에 추가 구성을 추가하려면 Objectfactory.Configure()를 사용하십시오.

내가 왜 당신이 EStudyModelDataContext에서 볼 수있는 오류를 얻었는지 모르지만, 게시 한 내용에 적어도 하나 이상의 문제가있는 것 같습니다.

console.WhatDoIHave() (콘솔에 보낼 수있는 문자열을 출력 함)를 호출하여 수행 한 작업과 올바르게 구성되지 않은 작업을 확인할 수도 있습니다.

관련 문제