2009-12-28 45 views
0

我在測試時經常遇到這個錯誤。我甚至無法創建一個應該返回RoleRepository的IRoleRepository實例。StructureMap配置否插件定義的異常代碼202

以下是錯誤:

TestCase的 'EStudy.Repository.Tests.when_fetching_instance_of_role_repository_using_structuremap.should_fetch_successfully' 失敗:StructureMap.StructureMapException:StructureMap異常代碼:202 爲PluginFamily EStudy.Domain.Model沒有定義默認實例。 Model.EStudyModelDataContext,EStudy.Domain.Model,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null at StructureMap.BuildSession。 < .ctor> b__0(T型) 在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(字符串propertyName的,類型pluginType,BuildSession 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(類型pluginType ,BuildSession會議,InstanceBuilder建設者) 在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(琴鍵) 在StructureMap.BuildSession.CreateInstance(類型pluginType) 在StructureMap.Container.GetInstance(類型pluginType) 在StructureMap.Container。 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()的任何連續調用都將有效清除任何現有配置並有效重新啓動Container。」

如果要將其他配置添加到現有容器,請使用Objectfactory.Configure()。

我不確定這解釋了爲什麼你會收到EStudyModelDataContext發生的錯誤,但是它絕對會在你發佈的內容中看到至少一個問題。

你也可以通過調用container.WhatDoIHave()(它可以輸出一個你可以發送到控制檯的字符串)來看看你做了什麼,沒有正確配置。