Archivio Categoria: c#

Dependency Injection su Maui

La dependency Injection è una delle funzioni più comode per poter avere del codice facilmente modificabile ma se vogliamo usarla su Maui potremmo incorrere in qualche problema.

Ma andiamo con ordine, come siamo abituati a fare iniziare con il creare la nostra interfaccia con i metodi che ci interessano

public interface IApiAccess
{
    bool Test();
}

e andiamo poi a creare la relativa classe che andrà ad implementarla

public class ApiAccess : IApiAccess
{
    public bool Test()
    {
        return true;
    }
}

Il passo successivo sarà naturalmente quello di andare a registrare il nostro singleton nella classe mauiprogram.cs

mauiAppBuilder.Services.AddSingleton<IApiAccess, ApiAccess>();

A questo punto quello che vogliamo fare è andare ad utilizzare questa interfaccia nella nostra pagina quindi nel costruttore andremo ad aggiungerla come parametro

public MainPage(IApiAccess apiAccess)
{
    InitializeComponent();
}

se a questo punto andremo ad eseguire il nostro programma quello a cui ci troveremo davanti sarà un bell’errore in fase di esecuzione che ci indica che non è presente nessun costruttore senza parametri

Come risolvere il problema quindi? Per fortuna la soluzione è molto semplice, dobbiamo andare ad aggiungere una nuova riga sempre nel file mauiprogram.cs dove andiamo ad aggiungere come Transient la pagina che ci interessa

builder.Services.AddTransient(<MainPage>);

purtroppo dovremo andare ad aggiungere una riga per ogni pagina in cui vogliamo andare ad utilizzare la dependency injection direttamente nel costruttore ma in questo modo potremmo utilizzarla con ogni classe che vogliamo.

Spero questa soluzione possa essere interessante ed evitarvi qualche mal di testa 😀 e come sempre buon coding!!

Diamo il benvenuto a MAUI, il nuovo re di Xamarin Forms

Ieri a build è stato presentato MAUI (.NET Multi-platform App UI) che sarà la base di sviluppo per i futuri progetti Xamarin multipiattaforma.

NET MAUI è un framework di nuova generazione per sviluppare applicazioni native multipiattaforma per dispositivi mobile e desktop. E’ stato sviluppato utilizzando la nuova generazione del framework .NET e di gestione dei progetti e introduce un nuovo modo di sviluppare applicazioni con una architettura  MVU (Model-View-Update) oltre a XAML e MVVM che conosciamo bene.

MAUI semplificherà inoltre lo sviluppo di applicazioni cross platform native introducendo una struttura con un singolo progetto e risorse cross-platform. Inoltre risorse condivise come font ed immagini e le tecnologie di hot reload e hot restart saranno presenti sin dall’inizio

Diciamo che in questo caso un’immagine vale più di molte parole

Riassumendo quindi avremo:

  • Un singolo progetto per le varie piattaforme
  • Una posizione dove avere le risorse come font ed immagini
  • Possibilità di gestire il codice specifico per le varie piattaforme

Ok tutto bello, ma quando potremo metterci le mani? Il lavoro è lungo come possiamo ben immaginare, una prima preview sarà disponibile più avanti quest’anno, mentre il rilascio come GA è previsto insieme al framework .NET 6 per novembre 2021, è disponibile anche una roadmap pubblica su GitHub.

Il lavoro da fare è molto e dovranno essere anche riscritte e modificate molte librerie e pacchetti di controlli, quindi ci sarà tutto il tempo per portarci a questa transizione.

Io sinceramente non vedo l’ora di poter mettere mano alla prima preview e testarla, e voi?

Intanto nell’attesa vi auguro buon coding e vi lascio il link all’articolo originale dove vengono presentate tutte le novità di Xamarin QUI

Benvenuto XAML Studio

Da pochi giorni è disponibile sullo store di Windows 10 un nuovo applicativo sviluppato da Microsoft Garage che permette di realizzare in modo molto veloce prototipi di applicazioni UWP permettendoci di avere una preview in tempo reale di quello che stiamo sviluppando.

Quello che vedete nella foto in basso è l’interfaccia del programma che in maniera molto intuitiva mette a disposizione un editor con 2 aree: una dove inserire il nostro codice e una dove vedere la preview interattiva, questo vuol dire che se inseriremo un elemento interattivo (ad es una textbox) potremo interagire con essa direttamente dalla preview.

Nonostante l’applicazione sia molto giovane ha già molte funzionalità interessanti tra cui:

  • Preview in tempo reale
  • Intellisense
  • binding da testo json o con download direttamente da url
  • documentation toolbox

la funzionalità di documentation toolbox in particolare risulta essere molto comoda in fase di apprendimento, in quanto permette di accedere direttamente alla documentazione dei vari componenti dove poter trovare i vari pezzi di codice da poter incollare direttamente nel tool per provarli

A questo punto non vi resta da fare altro che scaricarlo dallo store a questo indirizzo https://aka.ms/GetXAMLStudio ed iniziare ad utilizzarlo.

Il programma è molto interessante quindi sicuramente ci saranno altri post su questo argomento, per il momento non mi resta da fare altro che augurarvi buon coding!

Utilizzare edge come motore web nelle app win32

Uno dei componenti più utilizzato all’interno delle nostre app Win32 è il controllo WebView che permette di visualizzare dati html all’interno di essi.

Il problema di questo componente è che utilizza come motore di rendering Internet Explorer che su windows 10 è ormai stato sostituito da Edge, in questo articolo vedremo come utilizzare Edge come  componente webview grazie alle nuove funzionalità aggiunte nelle ultime versioni del Windows Community Toolkit.

Il primo passo sarà creare un progetto di tipo Windows Forms App.

Fatto questo dovremo proseguire andando ad aggiungere il pacchetto nuget Microsoft.Toolkit.Win32.UI.Controls al nostro progetto

Fatto questo dovremo andare ad aggiungere il nostro componente alla Toolbox per poterlo utilizzare, dovremo quindi andare nella toobox, fare tasto destro e selezionare choose items. Fatto questo nella sezione dei componenti del Framework .net possiamo andare ad aggiungere il componente andando a cercare il file Microsoft.Toolkit.Win32.UI.Controls.dll della cache di nuget che che si trova nella directory %userprofile%\.nuget\packages che ad esempio sul mio pc corrisponde alla cartella

C:\Users\NomeUser\.nuget\packages\microsoft.toolkit.win32.ui.controls\3.0.0\lib\net462

fatto questo avremo il nostro controllo webview che potremo trascinare nella nostra form per utilizzarlo.

Per vedere l’effettiva differenza possiamo affiancare il nuovo controllo WebView al vecchio WebBrowser e vedere andanda sulla pagina di test http://html5test.com/ come effettivamente stiamo utilizzando edge al posto del vecchio Internet Explorer

edgewin32

Adesso non avete più scusa per non aggiornare le vostre app 😀

Buon Coding!!!

How to fix error loading onnx file from filesystem

The default use of trained machine learning model in UWP apps is to add onnx file to your solution and leave Visual Studio to generate the corresponding class and load the file directly in the solution, but in some case can be useful to load the file from other sources, like the filesystem.

This is not a problem, the CreateXXXXXModel generate take a StorageFile so you can use a FilePicker to take a file, but if you try a code like this

FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.FileTypeFilter.Add(".onnx");
StorageFile selectedStorageFile = await fileOpenPicker.PickSingleFileAsync();
try
{
	_model = await CustomVisionModel.CreateCustomVisionModel(selectedStorageFile);
}catch(Exception ex)
{
	new MessageDialog(ex.StackTrace,ex.Message).ShowAsync();
}

You can see that an exception is thown in the calling of method LearningModelPreview.LoadModelFromStorageFileAsync in the generated class

public static async Task CreateCustomVisionModel(StorageFile file)
{
	LearningModelPreview learningModel = await LearningModelPreview.LoadModelFromStorageFileAsync(file);
	CustomVisionModel model = new CustomVisionModel();
	model.learningModel = learningModel;
	return model;
}

The exception does not give us more info about the problem

Exception from HRESULT: 0x88900103
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at WinMLTester.CustomVisionModel.d__1.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at WinMLTester.Views.MainPage.d__6.MoveNext()

it seems that file doesn’t have some permission for made WinML works, the solution is quite simple, before creating the model we need to copy the file in the app local folder and then use this file instead of the other.

We need only few lines of codes for do this

FileOpenPicker fileOpenPicker = new FileOpenPicker(); 
fileOpenPicker.FileTypeFilter.Add(".onnx"); 
StorageFile selectedStorageFile = await fileOpenPicker.PickSingleFileAsync(); 
//Fix for loading file
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sf2 = await selectedStorageFile.CopyAsync(storageFolder, selectedStorageFile.Name, NameCollisionOption.ReplaceExisting);
try
{
	_model = await CustomVisionModel.CreateCustomVisionModel(sf2);
}catch(Exception ex)
{
	new MessageDialog(ex.StackTrace,ex.Message);
}

Now your code work without problem

I have also created a new project on github for help to test your machine learning model created with Custom Vision service available on https://github.com/a-iafrate/WinMLTester that can be used to test this fix

happy coding!!

.Net standard su IoProgrammo

Questo mese su IoProgrammo numero 223 troverete il mio nuovo articolo sul framework .net standard, in’interessante tecnologia che ci permette di riutilizzare il nostro codice in tutte le tipologie di progetti.

Direi decisamente da non perdere 😀

Buon coding!!

Sessione Da A a Bot con un pizzico di cognitive

Grazie agli amici di DotNetPodcast, è disponibile la registrazione della mia sessione tenuta presso il LUISS EnLabs con la collaborazione di Codemotion e Syncfusion.

Abbiamo parlato di Bot e di come renderli più intelligenti con il servizio di Custom Vision ma non voglio rovinarvi le sorprese 😀

Fatemi sapere se l’argomento vi ha interessato e naturalmente buon coding 😀

Mixed reality su ioprogrammo

Questo mese su IoProgrammo numero 221 di Dicembre troverete il mio nuovo articolo sulla Mixed Reality per creare il vostro primo gioco!

Direi decisamente da non perdere 😀

Buon coding!!

Project Rome e cross device su IoProgrammo

ioprogrammo_july2017

Questo mese su IoProgrammo numero 215 di Luglio troverete il mio nuovo articolo su Project Rome e come utilizzarlo per condividere dati e funzionalità tra le varie piattaforme su cui la vostra applicazione è disponibile.

Una funzionalità disponibile in windows 10 che potrà dare una marcia in più alle vostre applicazioni.

Buon coding!!

 

Articolo il tuo sito in un’app su ioprogrammo

4-213g

Sul numero 213 di questo mese di ioprogrammo è stato pubblicato il mio articolo su come utilizzare Xamarin per portare il vostro blog wordpress in un’app su Windows, Android e iOS.

Buona lettura 😀

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi