Код: Выделить всё
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiCommunityToolkit()
.UseMauiApp()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
fonts.AddFont("Roboto-Regular.ttf", "RobotoRegular");
fonts.AddFont("Roboto-Medium.ttf", "RobotoMedium");
fonts.AddFont("Roboto-Light.ttf", "RobotoLight");
})
;
RegisterServicesAsync(builder.Services);
builder.Services.AddSingleton();
var app = builder.Build();
return app;
}
private static void RegisterServices(IServiceCollection services)
{
string dllFileName = "LibraryA.dll";
var dllPath = Path.Combine(FileSystem.AppDataDirectory, dllFileName);
var assembly = Assembly.LoadFrom(dllPath);
var serviceTypes = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.GetInterfaces().Any());
foreach (var implementationType in serviceTypes)
{
var interfaceType = implementationType.GetInterfaces().FirstOrDefault();
if (interfaceType != null)
{
var descriptor = services.FirstOrDefault(d => d.ServiceType == interfaceType);
if (descriptor != null)
{
services.Remove(descriptor);
}
services.AddSingleton(interfaceType, implementationType);
}
}
}
}
Код: Выделить всё
'/data/user/0/com.application/files/LibraryA.dll'. Когда я копирую LibraryA.dll по этому пути, все работает. Но я не могу добиться этого с помощью
using var stream = await FileSystem.OpenAppPackageFileAsync(dllFileName);
using var fileStream = File.Create(dllPath);
await stream.CopyToAsync(fileStream);
Код: Выделить всё
private static async Task RegisterServicesAsync(IServiceCollection services)
{
string dllFileName = "LibraryA.dll";
var dllPath = Path.Combine(FileSystem.AppDataDirectory, dllFileName);
****added code below****
using var stream = await FileSystem.OpenAppPackageFileAsync(dllFileName);
using var fileStream = File.Create(dllPath);
await stream.CopyToAsync(fileStream);
**********************
var assembly = Assembly.LoadFrom(dllPath);
var serviceTypes = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.GetInterfaces().Any());
foreach (var implementationType in serviceTypes)
{
var interfaceType = implementationType.GetInterfaces().FirstOrDefault();
if (interfaceType != null)
{
var descriptor = services.FirstOrDefault(d => d.ServiceType == interfaceType);
if (descriptor != null)
{
services.Remove(descriptor);
}
services.AddSingleton(interfaceType, implementationType);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ui-project
Мобильная версия