2017-09-15 5 views
0

J'essaie d'utiliser EF Core 2.0 dans mon application de service Windows (Ciblage .NET Framework 4.6.2). Pour rendre les choses intéressantes que je ne veux pas simplement créer une instance comme siEF Core et DI dans le service Windows

DbContext ctx = new DbContext(connectionString) 

Je voudrais l'utiliser avec l'injection de dépendance (StructureMap 4.5.2).

J'ai un IDbContext et mon DbContext ressemble:

public DbContext(string connectionString): base(new DbContextOptionsBuilder().UseSqlServer(connectionString).Options) 
{} 

Raison de mon « étrange » cteur est que je ne sais pas où ou comment configurer EF de base en service Windows. Où ou comment dois-je dire au service Windows d'utiliser la chaîne de connexion dans app.config?

Ce que je l'ai fait pour est maintenant que je dis StructureMap d'injecter chaîne de connexion comme ceci:

new Container(config => 
{ 
    // Register stuff in container, using the StructureMap APIs... 
    config.Scan(_ => 
    { 
     _.TheCallingAssembly(); 
     _.WithDefaultConventions(); 
     _.LookForRegistries(); 
     }); 

     config.For<IDbContext>().Use<DbContext>().Ctor<string>("connectionString").Is(_connectionString); 
}); 

est-il un moyen de faire similaire comme dans l'application .NET de base MVC:

services.AddDbContext<DbContext>(options => 
      options.UseSqlServer(connectionString)); 

Où services est l'instance IServiceCollection.

Quelqu'un peut-il me diriger dans la bonne direction comment faire de la meilleure façon possible?

Répondre

0

voici comment je le fais ..

public class RepositoryData : DbContext { 

public RepositoryData(string appSettingsOrConnectionName = null) :base(GetConnectionString(appSettingsOrConnectionName ?? "connection")) 
{ 

} 

private static string GetConnectionString(string appSettingsOrConnectionName = null) 
{ 
     if (!string.IsNullOrEmpty(appSettingsOrConnectionName) && appSettingsOrConnectionName.Contains(";")) 
      return appSettingsOrConnectionName; 
     if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings[appSettingsOrConnectionName])) 
      return ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings[appSettingsOrConnectionName]].ConnectionString; 
     else if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[appSettingsOrConnectionName].ConnectionString)) 
      return ConfigurationManager.ConnectionStrings[appSettingsOrConnectionName].ConnectionString; 
     else if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings["test"].ConnectionString)) 
     { 
      appSettingsOrConnectionName = "test"; 
      return ConfigurationManager.ConnectionStrings[appSettingsOrConnectionName].ConnectionString; 

     } 
     else return _defaultConnString; 
} 

}