2009-12-28 21 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()(它可以输出一个你可以发送到控制台的字符串)来看看你做了什么,没有正确配置。

相关问题