J'ai donc actuellement une classe DAO principale ITrackingToolDAO qui a tous les contrats de service pour chacune de mes entités commerciales.Windsor WCF Installation d'usine?
public partial interface ITrackingToolDAO {
void Open(string connectionString);
void Close();
IBusinessFunctionDAO BusinessFunction { get; }
IBusinessUnitDAO BusinessUnit { get; }
IProgramBudgetDAO ProgramBudget { get; }
IProjectDAO Project { get; }
...
}
Mon contrat de service ressemble donc
[ServiceContract(Namespace="http://bmgops.qintra.com/Tracking/v1/BusinessFunction")]
public partial interface IBusinessFunctionDAO {
[OperationContract]
BusinessFunction GetBusinessFunction(Int32 businessFunctionId);
[OperationContract]
IEnumerable<BusinessFunction> Find(string filter);
[OperationContract]
SaveEventArgs<BusinessFunction>Save(BusinessFunction businessFunction);
}
J'ai actuellement 2 implémentations concrètes de mon interface ITrackingToolDAO. Le premier est TrackingToolSqlDAO qui instancie un DAO SQL concret pour chaque entité. i.e.) BusinessFunctionSqlDAO, ProjectSqlDAO, etc.
Le second est un TrackingToolWCFDao qui crée proxys WCF en utilisant ChannelFactory <T> pour créer une mise en œuvre pour tous mes membres de DAO.
Maintenant, je veux commencer à utiliser le service WCF de Windsor au lieu de CreateChannel. Quel serait le meilleur moyen d'accomplir cela?
Je pensais à créer une implémentation fictive de ITrackingToolDAO qui prenait en compte un paramètre IKernel dans le constructeur.
public class DummyDAO: ITrackingToolDAO {
public DummyDAO(IKernel kernel) {
_ProjectDAO = kernel.Resolve<IProject>();
....
}
}
De cette façon, je pourrais utiliser l'installation WCF pour créer tous mes canaux. Je ne l'aime pas parce que c'est en utilisant le conteneur comme un localisateur de service qui est une odeur de code. Idéalement, je voudrais aussi que mon DAO SQL et mon nouveau WCF DAo soient tous deux enregistrés dans le conteneur afin que je puisse créer l'un ou l'autre en les référençant simplement par leur nom.
Des pensées?