2009-06-08 9 views
2

Comment configurer Castle Windsor pour utiliser une méthode Initialize pour une classe d'assistance statique lors de la demande d'un objet? J'essaye d'ajouter quelques méthodes d'extension HtmlHelper ainsi il doit être une classe et une méthode statiques. Mes extensions HtmlHelper dépendent d'un IHtmlHelpersService déjà configuré avec Castle Windsor. J'utilise Convention Over Configuration.IoC (Castle Windsor) et les assistants statiques

Modifier Je pense que ce que je veux est un ComponentActivator ou UsingFactory. Est-ce que je descends une impasse de cette façon?

Répondre

1

Je pense que vous voulez dire Convention over configuration?

Je ne connais aucun moyen de faire ce que vous suggérez. C'est un peu hacky, mais vous pouvez toujours créer une classe qui n'est pas statique et qui se conforme à l'interface et qui exécute simplement les méthodes statiques dont vous avez besoin. Parfois, ce type de chose est un mal nécessaire lors de l'utilisation d'un projet tiers. Bien sûr, si vous avez contribué au correctif pour le support du projet Castle, ils peuvent l'accepter.

+0

Doh, oui. Je l'ai corrigé. –

0

Je ne pense pas que IoC puisse vous aider avec des classes statiques, Windsor (ou tout autre IoC d'ailleurs) a besoin de quelque chose qu'il peut instancier (appeler un constructeur). Etes-vous en train d'échanger des méthodes d'assistance en fonction de la configuration?

Si c'est le cas, vous pourriez peut-être écrire un seul ensemble de méthodes d'extension qui appellent l'IoC pour leurs implémentations.

0

Une autre option consiste à créer une classe de base pour toutes vos ViewPages. Masquer la propriété HtmlHelper existante avec votre propre version:

public class MyHtmlHelper : HtmlHelper 
{ 
    // Take helper service, implement special methods 
} 

public class MyViewPage : ViewPage 
{ 
    protected new MyHtmlHelper HtmlHelper { get; set; } 
    // Wire up HtmlHelper as appropriate -- which is not going to be easy since 
    // the base property could be set at any time. 
} 

Maintenant toutes vos pages vue utilisera votre MyHtmlHelper spécial toute votre sauce spéciale, et ils ne sont même pas besoin d'être des méthodes d'extension. Une variante consiste à faire en sorte que votre MyHtmlHelper expose le service et continue d'écrire des méthodes d'extension qui ciblent cette aide.

-1

Vous pouvez factoriser de cette manière prise d'ici http://code.google.com/p/autofac/wiki/ExistingApplications:

Adapter Classe statique:

fonctionnalités liées Parfois, une application groupe dans une classe de fonctions statiques:

static class IdGenerator 
{ 
    static int _next = 0; 
    public static int GetNext() 
    { 
    return ++_next; 
    } 
} 

Ce genre de la conception n'a généralement pas sa place dans une application créée en utilisant l'injection de dépendance.

Au lieu de cela, créer une interface qui offre les mêmes fonctionnalités:

interface IIdGenerator 
{ 
    int GetNext(); 
} 

et une classe d'adaptation mise en œuvre qui utilise les méthodes statiques:

class IdGeneratorAdapter : IdGenerator 
{ 
    public int GetNext() 
    { 
    return IdGenerator.GetNext(); 
    } 
} 
+0

cela ne répond pas à ma question. –

Questions connexes