2010-02-24 7 views
2

J'utilise la bibliothèque MvcContrib avec Castle Windsor et j'ai un problème avec la définition d'un paramètre lors de l'enregistrement d'un composant.Composant de configuration MvcContrib Windsor avec le paramètre

J'ai les interfaces suivantes pour les classes qui enveloppent un DataContext. Je veux pour pouvoir spécifier quel DataContext utiliser pour différents services car Je me connecte à plusieurs bases de données pour récupérer des données.

public interface IDataContext 
{ 
    DataContext Context { get; } 
} 

public interface IReportingDC : IDataContext 
{ 
} 

public class Repository<T> : IRepository<T> where T : class 
{ 

public IDataContext DC {get; ensemble; }

public Repository(IDataContext dataContext) 
    { 
    DC = dataContext; 
    } 
} 

Voici les lignes d'enregistrement de mes Global.asax.cs.

container.AddComponentLifeStyle<IDataContext, MainDataContext>(Castle.Core.LifestyleType.PerWebRequest); 

container.AddComponentLifeStyle<IReportingDC, ReportingDC>(Castle.Core.LifestyleType.PerWebRequest); 

container.Register(Component.For<IRepository<ReportingTotals>>() 
.ImplementedBy<Repository<ReportingTotals>>() 
.Parameters(Parameter.ForKey("dataContext").Eq("IReportingDC")) 
.LifeStyle.PerWebRequest 
); 

Lorsque j'essaie de charger la page, j'obtiens l'erreur suivante.

"Clé non valide pour le paramètre datacontext Ainsi, le noyau n'a pas pu override la dépendance de service"

+0

veuillez corriger le formatage du code –

Répondre

4

Le nom de votre ServiceOverrides de composants et utiliser à la place des paramètres:

Component.For<IReportingDC>() 
     .ImplementedBy<ReportingDC>() 
     .Named("IReporting") 
     .LifeStyle.PerWebRequest 

et

Component.For<IRepository<ReportingTotals>>() 
     .ImplementedBy<Repository<ReportingTotals>>() 
     .ServiceOverrides(ServiceOverride.ForKey("dataContext").Eq("IReporting")) 

Voir le fluent API docs pour référence.

+0

Merci, je venais de trouver ça et je l'ai eu, alors je suis content que vous l'ayez confirmé pour moi. – MHinton