Mappify 1.0.0
See the version list below for details.
dotnet add package Mappify --version 1.0.0
NuGet\Install-Package Mappify -Version 1.0.0
<PackageReference Include="Mappify" Version="1.0.0" />
<PackageVersion Include="Mappify" Version="1.0.0" />
<PackageReference Include="Mappify" />
paket add Mappify --version 1.0.0
#r "nuget: Mappify, 1.0.0"
#:package Mappify@1.0.0
#addin nuget:?package=Mappify&version=1.0.0
#tool nuget:?package=Mappify&version=1.0.0
Mappify
Mappify — это библиотека для простого и удобного маппинга объектов в C#. Она позволяет создавать маппинги между различными типами объектов с использованием функций, обеспечивая гибкость и простоту.
Поддерживаемые типы маппинга
Mappify поддерживает следующие типы маппинга:
- Маппинг одиночных объектов
- Маппинг массивов
- Маппинг списков
- Маппинг очередей
- Маппинг стеков
- Маппинг словарей
- Маппинг из нескольких источников
Установка
Вы можете установить библиотеку через NuGet:
dotnet add package Mappify
Использование
Настройка зависимостей
Для начала работы с библиотекой вам необходимо зарегистрировать Mappify
и ваши профили маппинга в контейнере зависимостей. Это можно сделать следующим образом:
using Microsoft.Extensions.DependencyInjection;
using Mappify;
var services = new ServiceCollection();
services.AddMappify();
services.AddMappifyProfile<MyMappingProfile>(); // Замените на ваш профиль маппинга
var serviceProvider = services.BuildServiceProvider();
var Mappify = serviceProvider.GetRequiredService<IMappify>();
Создание профиля маппинга
Создайте класс, унаследованный от BaseMappingProfile
, и реализуйте метод CreateMaps
для определения маппинга:
public class MyMappingProfile : BaseMappingProfile
{
public override void CreateMaps(IMappify Mappify)
{
Mappify.CreateMap<SourceClass, DestinationClass>(source => new DestinationClass
{
Property1 = source.Property1,
Property2 = source.Property2
});
}
}
Маппинг объектов
Теперь вы можете использовать созданный маппер для маппинга объектов:
var source = new SourceClass { Property1 = "Value1", Property2 = "Value2" };
var destination = Mappify.Map<SourceClass, DestinationClass>(source);
Универсальный метод маппинга
Библиотека предоставляет универсальный метод для маппинга объектов:
public TD Map<TD>(object source)
Этот метод позволяет маппить данные из объекта произвольного типа в целевой объект типа TD
.
Пример использования:
var source = new SourceClass { Property1 = "Value1", Property2 = "Value2" };
var destination = Mappify.Map<DestinationClass>(source);
Он так же умеет работать с коллекциями и массивами. Пример использования:
var sourceList = new List<SourceClass>
{
new SourceClass { Property1 = "Value1", Property2 = "Value2" },
new SourceClass { Property1 = "Value3", Property2 = "Value4" }
};
var destinationList = Mappify.Map<List<DestinationClass>>(sourceList);
Маппинг коллекций
Библиотека также поддерживает маппинг коллекций. Вот несколько примеров:
Пример 1: Маппинг списка объектов
var sourceList = new List<SourceClass>
{
new SourceClass { Property1 = "Value1", Property2 = "Value2" },
new SourceClass { Property1 = "Value3", Property2 = "Value4" }
};
var destinationList = Mappify.MapList<DestinationClass>(sourceList);
// destinationList теперь содержит два объекта DestinationClass
Пример 2: Маппинг массива объектов
var sourceArray = new SourceClass[]
{
new SourceClass { Property1 = "Value1", Property2 = "Value2" },
new SourceClass { Property1 = "Value3", Property2 = "Value4" }
};
var destinationArray = Mappify.MapArray<DestinationClass>(sourceArray);
// destinationArray теперь содержит два объекта DestinationClass
Пример 3: Маппинг очереди объектов
var sourceQueue = new Queue<SourceClass>();
sourceQueue.Enqueue(new SourceClass { Property1 = "Value1", Property2 = "Value2" });
sourceQueue.Enqueue(new SourceClass { Property1 = "Value3", Property2 = "Value4" });
var destinationQueue = Mappify.MapQueue<SourceClass, DestinationClass>(sourceQueue);
// destinationQueue теперь содержит два объекта DestinationClass
Пример 4: Маппинг стека объектов
var sourceStack = new Stack<SourceClass>();
sourceStack.Push(new SourceClass { Property1 = "Value1", Property2 = "Value2" });
sourceStack.Push(new SourceClass { Property1 = "Value3", Property2 = "Value4" });
var destinationStack = Mappify.MapStack<SourceClass, DestinationClass>(sourceStack);
// destinationStack теперь содержит два объекта DestinationClass
Пример 5: Маппинг словаря объектов
var sourceDictionary = new Dictionary<int, SourceClass>
{
{ 1, new SourceClass { Property1 = "Value1", Property2 = "Value2" } },
{ 2, new SourceClass { Property1 = "Value3", Property2 = "Value4" } }
};
var destinationDictionary = Mappify.MapDictionary<SourceClass, DestinationClass, int>(sourceDictionary);
// destinationDictionary теперь содержит два объекта DestinationClass с теми же ключами
Маппинг из нескольких источников
Существует несолько перегрузок для маппинга из нескольких источников в один объект.
// Маппинг из 1 источника.
public TD Map<TS1, TD>(TS1 source1)
// Маппинг из 2 источников.
public TD Map<TS1, TS2, TD>(TS1 source1, TS2 source2, TS5 source5)
// Маппинг из 3 источников.
public TD Map<TS1, TS2, TS3, TD>(TS1 source1, TS2 source2, TS3 source3, TS5 source5)
// Маппинг из 4 источников.
public TD Map<TS1, TS2, TS3, TS4, TD>(TS1 source1, TS2 source2, TS3 source3, TS4 source4)
// Маппинг из 5 источников.
public TD Map<TS1, TS2, TS3, TS4, TS5, TD>(TS1 source1, TS2 source2, TS3 source3, TS4 source4, TS5 source5)
Метод 1: Маппинг из одного источника
public TD Map<TS1, TD>(TS1 source)
Этот метод позволяет маппить данные из одного источника source
типа TS1
в целевой объект типа TD
. Он полезен, когда вам нужно преобразовать один объект в другой.
Пример использования:
var singleSource = new SourceClass { Property1 = "Value1", Property2 = "Value2" };
var singleDestination = Mappify.Map<SourceClass, DestinationClass>(singleSource);
Метод 2: Маппинг из нескольких источников
public TD Map<TS1, TS2, TS3, TS4, TS5, TD>(TS1 source1, TS2 source2, TS3 source3, TS4 source4, TS5 source5)
Этот метод позволяет маппить данные из нескольких источников (до пяти) в целевой объект типа TD
. Это удобно, когда вам нужно объединить данные из нескольких объектов в один.
Пример использования:
var source1 = new SourceClass { Property1 = "Value1" };
var source2 = new OtherSourceClass { OtherProperty = "Value2" };
var source3 = new AdditionalSourceClass { AdditionalProperty = "Value3" };
var source4 = new FourthSourceClass { FourthProperty = "Value4" };
var source5 = new FifthSourceClass { FifthProperty = "Value5" };
// Создание маппинга из несольких источников
Mappify.CreateMap<SourceClass, OtherSourceClass, AdditionalSourceClass, FourthSourceClass, FifthSourceClass, CombinedDestinationClass>(
(source1, source2, source3, source4, source5) =>
{
var combinedDestination = new CombinedDestinationClass
{
CombinedProperty1 = source1.Property1,
CombinedProperty2 = source2.OtherProperty,
CombinedProperty3 = source3.AdditionalProperty,
CombinedProperty4 = source4.FourthProperty,
CombinedProperty5 = source5.FifthProperty
};
return combinedDestination;
});
var combinedDestination = Mappify.Map<SourceClass, OtherSourceClass, AdditionalSourceClass, FourthSourceClass, FifthSourceClass, CombinedDestinationClass>(source1, source2, source3, source4, source5);
Исключения
В библиотеке определены исключения, которые могут возникать при ошибках маппинга:
MappifyException
: возникает, если маппинг для данного типа не определен.
Вклад
Если вы хотите внести свой вклад в проект, пожалуйста, создайте форк репозитория, внесите изменения и создайте пулл-реквест.
Лицензия
Этот проект лицензирован под MIT License - смотрите файл LICENSE для подробностей.
Контакты
Если у вас есть вопросы или предложения, вы можете связаться со мной по почте lirikvolirvag@gmail.com
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.