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