Cela me déroute, donc cette question sera probablement confuse.Comment pouvez-vous mapper génériquement un DbDataReader à un type résolu Castle.Windsor?
J'ai une application qui utilise des implémentations d'une interface IJob pour accomplir différentes tâches.
public interface IJob
{
int Id { get; set; }
string Name { get; set; }
void Run();
}
Je me sers du Castle.Windsor.WindsorContainer pour résoudre ces mises en œuvre, et en utilisant l'identifiant de service pour les aider à identifier. J'ai écrit une petite méthode d'extension générique qui met simplement les valeurs des colonnes SQL dans leurs propriétés correspondantes. Maintenant, parce que vous ne pouvez pas instancier une instance d'une interface, le passage d'un IJob à cette méthode ne fonctionnera pas. Cependant, pour bénéficier des avantages du conteneur IoC, j'ai besoin de tout faire dans mon référentiel en utilisant l'interface IJob. Alors, je l'ai écrit avec cela pour résoudre la mise en œuvre de ijob, et le transmettre à la méthode MapTo pour remplir les propriétés nécessaires:
public IJob GetJobById(int id)
{
string cmdTxt = "SELECT Id, Name, Description, DateStarted, ScheduledCompletion, Completed FROM Jobs WHERE Id = @id";
using (DbCommand cmd = _dataFactory.CreateCommand(cmdTxt))
{
_dataFactory.AddParam(cmd, "id", id, DbType.Int32);
using (DbDataReader rdr = cmd.ExecuteReader())
{
if (rdr.Read())
{
IJob job = _container.Resolve<IJob>("job.implementation");
rdr.MapTo<IJob>(ref job);
return job;
}
else
{
return null;
}
}
}
}
Est-ce une décision de conception OK? Voyez-vous des problèmes?
Ces tâches planifiées s'exécutent-elles à un moment donné de la journée? Si c'est le cas, vous pouvez regarder Caslte.Schedular, il vous donnera un cadre pour créer et gérer des emplois et vous permettre de penser à la façon dont les emplois fonctionnent. Aussi comme il fait partie du château il s'intégrera bien avec windsor. – pythonandchips
Castle.Scheduler est sur le point de devenir obsolète –
@Colin, ils ne sont pas programmés. Plus comme, nous devons exécuter ce script sur 1000 machines, ou nous avons besoin de ce fichier de configuration tiré de tous les systèmes qui correspondent à tel ou tel critère. Ils sont généralement juste une affaire unique. – scottm