2012-02-28 1 views
0

Я не понимаю, как предоставить строго типизированные типы через поставщика типов. Все примеры, которые я вижу, имеют одинаковый тип в результате, независимо от ввода.Действительно сильно типизированные провайдеры

MiniCsvTypeProvider обеспечивает только двойной. RegexTypeProvider предоставляет только совпадения.

Возможно ли предоставить свойства различных типов в зависимости от от параметра, предоставленного поставщику?

if somevariable then 
     proptype = typeof<int> 
    else 
     proptype = typeof<string> 

    let staticProp = ProvidedProperty(propertyName = "property", 
             propertyType = propType, 
             GetterCode= (fun [arg] -> <@@ %%arg :?> propType @@>)) 
+0

или, может быть, мне нужно динамически создать тип объединения и для каждого элемента, создать его. не так просто. – nicolas

+0

Я думаю, что нужно пройти через «динамический кастинг» – nicolas

+0

(все это sh * t будет уходить с поэтапным временем выполнения). – nicolas

ответ

2

Да, это легко обеспечить различные типы в зависимости от ввода. В качестве простого примера, вы могли бы сделать что-то вроде:

let propType, propValue = 
    if somevariable then 
     typeof<int>, <@@ 1 @@> 
    else 
     typeof<string>, <@@ "test" @@> 

let prop = ProvidedProperty("property", propType, GetterCode = fun [_] -> propValue) 

Чтобы расширить это вдоль линий вы предполагаете, вы можете определить весь поглотитель в условном:

let propType, propGetter = 
    if somevariable then 
     typeof<int>, fun [arg] -> <@@ %%arg : int @@> 
    else 
     typeof<string>, fun [arg] -> <@@ %%arg : string @@> 

let prop = ProvidedProperty("property", propType, GetterCode = fun [_] -> propValue) 

Однако, к сведению что тогда вам необходимо убедиться, что представление, которое вы называете свойством, является int или string соответственно. Также обратите внимание, что в отличие от вашего выбранного наименования (staticProp), это не статические свойства, поскольку вы передаете приемник (arg) на геттер и не помечены статикой ProvidedProperty.

+0

Спасибо. Мне нужно это проверить. – nicolas

 Смежные вопросы

  • Нет связанных вопросов^_^