【问题标题】:StructureMap Configuration No Plug-in Defined Exception Code 202StructureMap 配置无插件定义的异常代码 202
【发布时间】:2009-12-28 16:47:00
【问题描述】:

我在测试时经常遇到这个错误。我什至无法创建应该返回 RoleRepository 的 IRoleRepository 实例。

这里是错误:

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 定义默认实例 在 StructureMap.BuildSession.<.ctor>b__0(类型 t) 在 StructureMap.Util.Cache2.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.ConfiguredInstanceBase1.getChild(String propertyName, Type pluginType, BuildSession buildSession) 在 StructureMap.Pipeline.ConfiguredInstanceBase1.StructureMap.Pipeline.IConfiguredInstance.GetChild(String propertyName, Type pluginType, BuildSession buildSession) at EStudyDomainModelRepositoriesRoleRepositoryInstanceBuilder4c713d65fe464f4792cd90352224a54b.BuildInstance(IConfiguredInstance , BuildSession ) at StructureMap.Pipeline.ConfiguredInstanceBase1.StructureMap.Pipeline.IConfiguredInstance.Build(类型 pluginType,BuildSession 会话,InstanceBuilder 生成器) 在 StructureMap.Pipeline.ConfiguredInstanceBase1.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.Cache2.get_Item(KEY key) 在 StructureMap.BuildSession.CreateInstance(类型 pluginType) 在 StructureMap.Container.GetInstance(类型 pluginType) 在 StructureMap.Container.GetInstanceT 在 StructureMap.ObjectFactory.GetInstancePLUGINTYPE C:\Projects\EStudyVS2008\EStudySoltution\EStudy.Repository.Tests\Test_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>();
                       }

                );





        }

【问题讨论】:

    标签: structuremap


    【解决方案1】:

    您不应多次调用 Initialize()。来自文档:

    “任何对 Initialize() 的连续调用都将有效地清除任何现有配置并有效地重新启动容器。”

    如果要向现有容器添加其他配置,请使用 Objectfactory.Configure()。

    我不确定这是否解释了为什么您会收到您在 EStudyModelDataContext 中看到的错误,但它肯定看起来至少与您发布的内容有一个问题。

    您还可以通过调用 container.WhatDoIHave()(输出一个可以发送到控制台的字符串)来查看您所做的和未正确配置的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      相关资源
      最近更新 更多