0

I have attempted a simple program to try out configuration based constructor injection. Here is the code:

using StructureMap;
namespace StructureMapConfig
{
    class Program
    {
        static void Main(string[] args)
        {
            ObjectFactory.Initialize(x =>
                {
                    x.PullConfigurationFromAppConfig = true;
                });

            var result = ObjectFactory.GetInstance<IIConstructor>();
        }
    }

    public interface IIConstructor
    {
    }

    public class Constructor : IIConstructor
    {
        public Constructor(bool test)
        {

        }
    }
}

Here is my configuration file:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="StructureMap"
             type="StructureMap.Configuration.StructureMapConfigurationSection,StructureMap"/>
  </configSections>
  <StructureMap>
    <DefaultInstance MementoStyle="Attribute"
                     PluginType="StructureMapConfig.IIConstructor,StructureMapConfig"
                     PluggedType="StructureMapConfig.Constructor,StructureMapConfig"
                     test="false"/>
  </StructureMap>
  <startup>
    <supportedRuntime version="v4.0"
                      sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

I keep getting a large stack trace when reading the config file, boiling down to this error:

Trying to visit parameter test of type System.Boolean in the constructor for StructureMapConfig.Constructor, StructureMapConfig, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ---> StructureMap.StructureMapException: StructureMap Exception Code: 205 Missing requested Instance property "test" for InstanceKey "DefaultInstanceOfStructureMapConfig.IIConstructor, StructureMapConfig, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

The code definitely has a constructor argument called "test" and the destination type is correct - a boolean.

Can someone please give me guidance as to where I'm going wrong?

--

Note: I want to keep this in configuration only, as it will require a re-compile if this value is changed from "false" to "true", hence defeating the point of defining it in config.

1 Answer 1

1

Got it,

"MementoStyle" should be on the <StructureMap> element, not on the <DefaultInstance>

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.