2013-07-08 11 views
5

Ho bisogno di utilizzare più stringhe di connessione nella mia applicazione ASP.NET MVC. Come posso farlo? Ora sto registrando connessione come segue:ASP.NET MVC. Autofac e più stringhe di connessione

builder.RegisterType<SqlConnection>().WithParameter(
    "connectionString", 
    WebConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString) 
    .InstancePerLifetimeScope() 
    .ExternallyOwned(); 

builder.Register(c => new ContextDataContext(c.Resolve<SqlConnection>())).InstancePerDependency(); 

risposta

3

È possibile registrare più istanze di un determinato tipo per nome:

Da Autofac tutorial:

builder.Register<OnlineState>().Named<IDeviceState>("online"); 

Per recuperare un servizio denominato, il metodo ResolveNamed() è utilizzato:

var r = container.ResolveNamed<IDeviceState>("online"); 

http://autofac.readthedocs.org/en/latest/advanced/keyed-services.html

+0

Grazie. Mi hai dato il punto di ingresso e decido di usare il metodo Keyed. – alexmac

0

Un modo per farlo, è quello di creare il proprio factory di connessione, e registrarlo con autofac. Qualcosa di simile:

interface IConnectionFactory{ 
    SqlConnection CreateConnection(string connectionStringName); 
} 
+0

Come si suppone questo aiuti nell'utilizzo di più stringhe di connessione? L'uso di una fabbrica ha senso quando è necessaria l'inizializzazione personalizzata dei componenti prima del suo utilizzo. Non è una risposta per la domanda principale, anche se è utile. (o non vedo come intendi usarlo) – kubal5003

+0

@ kubal5003, il suo factory creerà una connessione con una stringa di connessione specificata, in base al suo nome, così il suo codice può chiamare questo metodo factory per ottenere la connessione necessaria. – alex

-2

È possibile definire più stringhe di connessione nella sezione in web.config

<connectionStrings> 

    <add name="ProductConnection" providerName="System.Data.SqlClient" connectionString="_YOUR_CONNECTION_STRING_1_"/> 

    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="_YOUR_CONNECTION_STRING_2_"/> 

</connectionStrings> 

Nel codice è possibile utilizzare come,

ConfigurationManager.ConnectionStrings["ProductConnection"] per ottenere la stringa di connessione.

Nel caso in cui si desideri ottenere un'istanza basata sulla stringa di connessione, è possibile utilizzare qualsiasi factory in grado di risolvere l'istanza in base al nome della stringa di connessione. SimpleFactory + Unity o SimpleFactory + Autofac può aiutarti in questo.

Problemi correlati