Spring.net to structuremap dependency injection conversion

697 views Asked by At

Good day,

How do i convert this spring configuration to structuremap configuration. I have this spring.net config.

<db:provider id="DbProvider" 
      provider="System.Data.SqlClient" 
      connectionString="Data Source=(local);Database=Spring;User ID=springqa;Password=springqa;Trusted_Connection=False"/>

  <object id="adoTemplate" type="Spring.Data.Core.AdoTemplate, Spring.Data">  
    <property name="DbProvider" ref="DbProvider"/>                
  </object>

</objects>

My conversion is like this,

For<Spring.Data.Core.AdoTemplate>().Use<Spring.Data.Core.AdoTemplate>().Configure.WithProperty("DBProvider").EqualTo(??????);

How/where do i get the instance of the DBProvider property? In Spring .Net it is defined in the xml tag but i do not know how this is done on structure map.

Has anybody encountered the same problem and found a solution? Please help.

1

There are 1 answers

0
BennyM On

Not that I've ever used structuremap but the Spring.NET providername "System.Data.SqlClient" is mapped in Spring.NET 1.3.1 to the xml configuration posted below as available in the Spring.NET source code. You can extract the pieces of information (probably the type names are the ones you're looking for) as needed.

<object id="SqlServer-2.0" type="Spring.Data.Common.DbProvider, Spring.Data" singleton="false">
        <constructor-arg name="dbMetaData">
            <object type="Spring.Data.Common.DbMetadata">
                <constructor-arg name="productName" value="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0" />
                <constructor-arg name="assemblyName" value="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <constructor-arg name="connectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <constructor-arg name="commandType" value="System.Data.SqlClient.SqlCommand, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <constructor-arg name="parameterType" value="System.Data.SqlClient.SqlParameter, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <constructor-arg name="dataAdapterType" value="System.Data.SqlClient.SqlDataAdapter, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <constructor-arg name="commandBuilderType" value="System.Data.SqlClient.SqlCommandBuilder, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <constructor-arg name="commandBuilderDeriveParametersMethod" value="DeriveParameters"/>
                <constructor-arg name="parameterDbType" value="System.Data.SqlDbType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <constructor-arg name="parameterDbTypeProperty" value="SqlDbType"/>
                <constructor-arg name="parameterIsNullableProperty" value="IsNullable"/>
                <constructor-arg name="parameterNamePrefix" value="@"/>
                <constructor-arg name="exceptionType" value="System.Data.SqlClient.SqlException, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <constructor-arg name="useParameterNamePrefixInParameterCollection" value="true"/>
        <constructor-arg name="useParameterPrefixInSql" value="true"/>     
                <constructor-arg name="bindByName" value="true"/>
                <!-- this is only true for .net 1.1 kept it here just in case we want to revert back to this strategy for
             obtaining error codes-->
                <constructor-arg name="errorCodeExceptionExpression" value="Errors[0].Number.ToString()"/>

        <!-- TODO select form system db all errors that have 'incorrect syntax' at the start of the error string-->
        <property name="ErrorCodes.BadSqlGrammarCodes">
          <value>156,170,207,208</value>
        </property>
        <property name="ErrorCodes.PermissionDeniedCodes">
          <value>229</value>
        </property>
        <property name="ErrorCodes.DataIntegrityViolationCodes">
          <value>544,2627,8114,8115</value>
        </property>
        <property name="ErrorCodes.DeadlockLoserCodes">
          <value>1205</value>
        </property>
            </object>
        </constructor-arg>

    </object>