2010-07-02 4 views
0

J'ai une langue spécifique au domaine et je souhaite enregistrer des objets qui peuvent être instanciés à l'intérieur.Résolution de paramètres avec une classe personnalisée

Par exemple une classe qui peut faire des requêtes http.

[IoC("HttpRequest", typeof(DslScriptObject), IoCAttribute.IoCLifestyleType.Transient)] 
internal class WebRequestDslObj : DslScriptObject 
{ 
    [DslNew] 
    public WebRequestDslObj() : this(null, null) 
    {} 
    [DslNew] 
    public WebRequestDslObj([DslParam("uri")]string uristring, [DslOptionalParam("contenttype")] string contenttype) : this(uristring, null) 
    {} 
} 

J'ai alors une classe qui associe les types de mes dsl types de données à C# types de données (je les ai comme IList si cela fait une différence), et cela fonctionne bien, si je ne l'utilise pas le château à instancier objet.

Mais dès que je veux utiliser IoC pour auto-enregistrer les différents types, alors je ne sais pas quoi faire à propos des constructeurs. J'ai essayé de fixer un CustomComponentActivator, mais je suis resté bloqué à ne pas pouvoir trouver n'importe quel bon exemple ou documentation. Est-ce une voie viable à prendre? (et serai-je capable de contourner le cas spécial drôle pour les paramètres null?)

Quelqu'un at-il un exemple de où je peux commencer?

Répondre

2

Alors qu'est-ce que vous essayez de faire avec Windsor, parce que je ne suis pas sûr que je vois où vous allez avec elle ...

Si vous voulez affecter la façon dont le composant s'inscrire à Windsor, par exemple renommer les paramètres, vous pouvez écrire ComponentModel construction contributor personnalisé pour le faire.

+0

Lorsque je rencontre un nouvel opérateur dans mon dsl, je veux résoudre le DslScriptObject avec la clé qui est le nom de la classe, et donner les paramètres. Et quelque part au milieu de la résolution, trouvez le bon constructeur en fonction des paramètres donnés et instanciez mon objet. – Cine

+0

Vous devez donc fondamentalement mapper les valeurs de 'DslParamAttribute' comme" uri "aux noms réels des paramètres .ctor comme" uristring ", est-ce correct? –

+0

oui, et trouver la bonne fonction (bien que cette partie n'est pas vraiment quelque chose que j'ai besoin de faire, sauf me donner tout le ConstructorInfo ou similaire pour prendre la décision) – Cine

Questions connexes