Ninject de liaison des constructeurs avec arguments / Entity Framework chaîne de connexion
S'il vous plaît pardonnez mon ignorance, mais je suis très nouveau à la COI et à NinJect. J'ai cherché haut et bas pour facilement compréhensible des solutions, mais jusqu'à présent, ils ont échappé à moi.
Pour l'instant j'ai la suite et tout fonctionne comme prévu:
private class StandardModule : NinjectModule
{
public override void Load()
{
Bind<ILog>().To<NLogLogger>(); //Use NLog
Bind<IMyEntityFrameWorkRepository().To<MyEntityFrameWorkRepository>();
}
}
MyEntityFrameWorkRepository crée ensuite sa propre EF DbContext par l'intermédiaire d'une chaîne de connexion déclaré dans app/web.config:
public class MyDbContext : DbContext
{
public MyDbContext() : base("MyAppConfig")
{
}
........
}
CEPENDANT!! Mon but est de faire quelque chose comme cela - je réaliser cette syntaxe est "non-sens" (et je pense j'ai peut-être CIO MyDbConext trop) , mais j'espère que le "pseudo-code" exprime mon désir:
private class StandardModule : NinjectModule
{
public override void Load()
{
Bind<ILog>().To<NLogLogger>(); //Use NLog
string mySqlConnectionString = MyApp.GetCommandLineArgument("sqlconn"); //"Data Source=..."
Bind<IMyEntityFrameWorkRepository().To<MyEntityFrameWorkRepository>(mySqlConnectionString);
}
}
.................
public class MyDbContext : DbContext
{
public MyDbContext( string sqlConnectionString) :
base(sqlConnectionString) //will accept a standard SQL connection string
{
}
........
}
Je voudrais vraiment l'apprécier quelques commentaires de CIO /NinJect experts, car je suis sûr que n'importe quel "modèle" peut être très utile dans d'autres scénarios.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
.WithConstructorArgument()
méthode pour spécifier des arguments du constructeur. Le premier argument doit être le nom du paramètre du constructeur.}
WithConstructorArgument
plusieurs fois pour plusieurs paramètres du constructeur?Des versions plus récentes de Ninject permettent de se débarrasser de la magie des cordes dans la définition de liaison. Quelque chose comme ceci:
Pour les liaisons impliquant des types génériques (par exemple, lier
ISomeService<T>
àSomeService<T>
et de liaison doit être réalisée pour tous les types possibles à la fois),ToConstructor
ne peut pas être utilisé (une nouvelle expression est nécessaire), de sorteWithConstructorArgument
reste l'approche la plus simple. E. g.: