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```
```vbnet
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.

```vbnet
Public Class Person
    Implements IPerson

    Public Function Name() As String Implements IPerson.Name
        Return "Person"
    End Function
End Class```
```vbnet
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.

```vbnet
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 ;-))

```vbnet
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.