2010-03-02 13 views
1

Je suis ouvert à d'autres conteneurs IoC, tels que NInject et StructureMap s'ils sont beaucoup plus propres que cela. J'entends que StructureMap vient d'introduire des "conteneurs" qui pourraient peut-être simplifier cela?Y a-t-il une meilleure façon d'utiliser l'API de Castle Windsor pour les usines?

Comme le dit le titre, y a-t-il un meilleur moyen? Cela ressemble à beaucoup de code, juste pour enregistrer un objet qui nécessite une usine pour le créer.

// The process to register an object, with a factory method 
var cfg = new MutableConfiguration(p.Name); 
cfg.Attributes["factoryId"] = p.TypeFactory.Name; 
cfg.Attributes["factoryCreate"] = "Create"; 
var model = _container.Kernel.ComponentModelBuilder.BuildModel(
    p.Name, p.TypeService, p.Type, null); 
model.LifestyleType = LifestyleType.Pooled; 
model.Configuration = cfg; 
_container.Kernel.AddCustomComponent(model); 

Versas à fond vers le "non-usine" d'ajouter un composant:

// registering a component with no factory method 
_container.AddComponentLifeStyle(
    p.Name, p.TypeService, p.Type, LifestyleType.Singleton); 

Le premier semble trop complexe.

Merci d'avance!

+0

Avez-vous envisagé de vérifier la documentation avant d'envoyer ce message? http://using.castleproject.org/display/IoC/Fluent+Registration+API#FluentRegistrationAPI-Usingadelegateascomponentfactory: –

+0

et la classe FactorySupportFacility propose également des méthodes pour vous aider si vous ne voulez pas avoir une API fluide. Vous avez essentiellement choisi la façon la moins optimale de le faire. –

+0

Bonjour Krzysztof et merci pour les commentaires. C'est drôle, je n'ai jamais vu un lien vers la documentation du château - comme tous les liens, il y a des pages comme celle-ci: http://api.castleproject.org/ Directement depuis leur site web. Merci de m'avoir reliée à la documentation actuelle (mais soyez gentil dans vos commentaires à l'avenir). – eduncan911

Répondre

3

Je ne suis pas sûr de ce que vous essayez d'enregistrer (ce qui est p dans le premier bloc de code?) Mais avec UsingFactoryMethod, l'enregistrement d'usine est un jeu d'enfant. Exemple de code:

container.AddFacility<FactorySupportFacility>() 
    .Register(
     Component.For<IMyService>() 
     .UsingFactoryMethod(() => MyLegacyServiceFactory.CreateMyService()) 
     .LifeStyle.Pooled 
    ); 
+0

Bonjour à nouveau Mauricio! Wow, ça simplifie les choses. Comme un commentaire à la question mentionnée ci-dessus, il semble y avoir un endroit différent pour la documentation, même si le site principal de castleproject vous indique ceci: http://api.castleproject.org/ Merci. Marqué comme réponse. Oh, et le "p" provenait d'une requête Linq. n'aurait pas dû avoir d'importance. – eduncan911

+1

IOU l'amélioration de la page de téléchargement. Je n'ai pas oublié :) –