Использование XML-Typeprovider из другого модуля

Я делаю анализ на XML-файл, используя F#. Поскольку объем кода увеличился, я решил разбить свой код на несколько файлов.

Итак, я создал новый файл, который выглядит примерно так:

module Analyis

open FSharp.Data
open System

type someXml = XmlProvider<"someXMLFile.xml">

// Some Analysis functions down here

Когда я сейчас пытаюсь использовать мой тип из другого файла, подтипы, которые должны быть получены с помощью typeprovider, больше не могут быть найдены:

open Analysis

let importantFunction (data:someXml) =
    let thisDoesNotWork = data.someProperty

// more code

Это работает, только если я загружаю данные внутри функции следующим образом:

open Analysis

let importantFunction =
    let data = someXml.GetSample()

    let nowItWorks = data.someProperty

// more code

Вопросы:

  • Есть ли конкретная причина, почему это не работает?

  • Как существует "правильный" способ разделения XmlType на другой файл?

1 ответ

Решение

Вы можете разделить образцы в свои собственные файлы.

Я использую это следующим образом

module infoParser =

    open FSharp.Data

    type jsonProvider = JsonProvider<"./schemaSamples/fileSchema.json", EmbeddedResource="Parsers, fileschema.json">

    type Info (textJsonIn: string) =
        let parsedInfo = jsonProvider.Parse(textJsonIn)

Теперь вы можете создать "экземпляр" Info и получить доступ к полям.

В моем случае я использую infoParser из класса C# и получаю экземпляр через вызов конструктора как

var info = new Info(myJsonString);

Я основал свой код на примере XML, поэтому он должен быть в порядке для ваших нужд.

Другие вопросы по тегам