I can't figure out how to define the default constructor (when it exists overloads) for a type in StructureMap (version 2.5) by code.
I want to get an instance of a service and the container has to inject a Linq2Sql data context instance into it.
I wrote this in my 'bootstrapper' method :
ForRequestedType<MyDataContext>().TheDefault.Is.OfConcreteType<MyDataContext>();
When I run my app, I got this error :
StructureMap Exception Code: 202
No Default Instance defined for PluginFamily MyNamespace.Data.SqlRepository.MyDataContext, MyNamespace.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
If I comment out all Linq2Sql generated contructors that I don't need, it works fine.
Update : Oh, and I forgot to say that I would not use the [StructureMap.DefaultConstructor]
attribute.
I'm not sure how / if it can be done with the fluent interface / internal DSL. You can however use an attribute, if you're not fussed about polluting your domain?
Tag your preferred constructor with [DefaultConstructor] StructureMap defaults to the greediest constructor by convention (constructor with the most parameters).
You can specify a constructor with the ConstructedBy(). Please try this:
This worked for me.
I'm assuming you'd also need to set the object lifetime (InstanceScope) if you are using Linq2Sql. I'd suggest using this code because it give you a little more flexibility.
With this code you can also further inject interfaces definitions into the MyDataContext constructor like this
Just remember to define the concrete type with StructureMap for your IDatabaseFactory instance.