I’m using the SVN version for this.
Lets give an example of how to do this.
First we create a few interfaces.
- Public Interface IPerson
- Function Name() As String
- End Interface
- Public Interface ITest
- Function Name() As String
- Property Person() As IPerson
- End Interface
as we can see ITest has a property Person of type IPerson. Ideally we would like to inject the IPerson.
Then we have the concrete classes.
- Public Class Person
- Implements IPerson
- Public Function Name() As String Implements IPerson.Name
- Return "Person"
- End Function
- End Class
- Public Class Test
- Implements ITest
- Private _Person As IPerson
- Public Sub New()
- End Sub
- Public Function Name() As String Implements ITest.Name
- Return "test"
- End Function
- Public Property Testprop() As IPerson Implements ITest.Person
- Get
- Return _Person
- End Get
- Set(ByVal value As IPerson)
- _Person = value
- End Set
- End Property
- End Class
Now I want to inject the Person that I have already made with structureMap.
- Dim _Registry As StructureMap.Configuration.DSL.Registry
- _Registry.ForRequestedType(Of IPerson).TheDefault.Is.OfConcreteType(Of Person).WithName("default")
- _Registry.ForRequestedType(Of ITest).TheDefault.Is.OfConcreteType(Of Test).WithName("default").SetterDependency(Of IPerson).Is(Function(e) e.TheDefault)
- Dim _Container As New StructureMap.IContainer(_Registry)
The first line makes a new registry.
The second line adds a Iperson to the registry with as concretetype Person that is also the default for IPerson with a name of default.
The third line adds an ITest to the registry with as concretetype Test that is also the default for ITest with a name of default and a setterdepency on IPerson that wants the default implementation of IPerson which we declared in line 2.
Line 4 creates the container.
Having done all this we can now see the result via console.writeline (our favorite testrunner ;-))
- Console.WriteLine(_container.GetInstance(Of ITest).Name)
- Console.WriteLine(_container.GetInstance(Of ITest).Person.Name)
- Console.WriteLine(_container.GetInstance(Of IPerson).Name)
This should give the following as a result.
test
Person
Person
Simple enough. Very usefull for when you want to inject your observable into a usercontrol. Usercontrols should have a default constructor for the designer, actually it is also the only constructor because the designer can have a difficult time otherwise. This is actually the only reason why I use Setterinjection instead of constructorinjection.





LTD Social Sitings
Note: Watch for social icons on posts by your favorite authors to follow their postings on these and other social sites.