Reutilizar clases en Azure Functions dentro de una Azure Function App
En esta entrada, voy a explicar cómo podemos reutilizar clases entre varias Azure Functions pertenecientes a la misma Azure Function App.
Partiendo de un ejemplo anterior de mi blog, en el que explicaba como cargar y utilizar una clase desde la clase principal de nuestra Azure Function, imaginemos ahora que queremos reutilizar la clase que creamos en aquel ejemplo y que contenía el nombre, apellidos y dirección de correo electrónico.
La forma más sencilla que he encontrado de llegar a cabo esta tarea desde el portal de Azure es accediendo al App Service Editor.
Una vez en el editor, dentro del árbol WWWROOT, haré clic con el botón derecho del ratón sobre el fondo y seleccionaré la opción New File del menú emergente.
Crearé un fichero de nombre Person.csx.
Escribiré dentro de él el contenido de nuestra clase:
#r "Newtonsoft.Json" using Newtonsoft.Json; public class Person { [JsonProperty(PropertyName = "firstname")] public string Username { get; set; } [JsonProperty(PropertyName = "lastname")] public string Lastname { get; set; } [JsonProperty(PropertyName = "email")] public string Email { get; set; } }
Ahora, en nuestra Azure Function deberemos indicar cómo acceder a esta clase.
Esta clase no está en la carpeta de nuestra Azure Function, sino debajo de ella, a nivel de los ficheros de configuración general de nuestra Azure Function App.
Por lo tanto, el código de nuestra Azure Function, debería quedar de la siguiente forma:
#r "Newtonsoft.Json" #load "../Person.csx" using Newtonsoft.Json; using System.Configuration; using System.Net; using System.Text; public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) { dynamic data = await req.Content.ReadAsAsync<object>(); var person = new Person(); person.Username = data.firstname; person.Lastname = data.lastname; person.Email = data.email; return req.CreateResponse(HttpStatusCode.OK, $"Registrado para {person.Username} {person.Lastname} {person.Email}"); }
Si probamos nuestra Azure Function con un JSON válido como por ejemplo:
{ "firstname": "Jorge", "lastname": "Serrano", "email": "foo@foo.com" }
Debería funcionar correctamente.
Nótese que a la hora de cargar la clase Person.csx, hemos indicado con dos puntos dentro de run.csx el lugar en el que se encuentra. Un punto para la carpeta raiz de nuestra Azure Function, y dos puntos para el raiz de nuestra Azure Function App.
De esta forma, podemos reutilizar clases entre diferentes Azure Functions dentro de una Azure Function App.
Espero que te sirva.
Happy Coding!