Hedef kümelerim özel olduğunda, nesneyi hedef nesnenin yapıcısını kullanarak eşlemek isteyebilirim. Bunu Automapper kullanarak nasıl yaparsınız?Otomatik yanıtlayıcı - özellik kümeleri yerine yapıcı parametrelerini eşleme nasıl yapılır
cevap
Kullanım ConstructUsing
bu eşleme sırasında kullanılacak yapıcı belirtmek sağlayacaktır. ancak diğer tüm özellikler, sözleşmelere göre otomatik olarak haritalandırılacaktır.
Ayrıca, bu dönüşümün ConvertUsing
'dan farklı olduğunu, dönüştürmenin kullanılmasının geleneklerle eşleştirilmediğini, bunun yerine eşlemenin tam denetimini vereceğini unutmayın.
Mapper.CreateMap<ObjectFrom, ObjectTo>()
.ConstructUsing(x => new ObjectTo(arg0, arg1, etc));
...
using AutoMapper;
using NUnit.Framework;
namespace UnitTests
{
[TestFixture]
public class Tester
{
[Test]
public void Test_ConstructUsing()
{
Mapper.CreateMap<ObjectFrom, ObjectTo>()
.ConstructUsing(x => new ObjectTo(x.Name));
var from = new ObjectFrom { Name = "Jon", Age = 25 };
ObjectTo to = Mapper.Map<ObjectFrom, ObjectTo>(from);
Assert.That(to.Name, Is.EqualTo(from.Name));
Assert.That(to.Age, Is.EqualTo(from.Age));
}
}
public class ObjectFrom
{
public string Name { get; set; }
public int Age { get; set; }
}
public class ObjectTo
{
private readonly string _name;
public ObjectTo(string name)
{
_name = name;
}
public string Name
{
get { return _name; }
}
public int Age { get; set; }
}
}
Sen hedefi ayarlamanıza izin verir Map
yöntemi kullanmalısınız. Örneğin: özellikler yapıcı parametreleri eşleşirse
Mapper.CreateMap<ObjectFrom, ObjectTo>()
var from = new ObjectFrom { Name = "Jon", Age = 25 };
var to = Mapper.Map(from, new ObjectTo(param1));
bu cevabı yazma zamanda, AutoMapper sizin için (basit bir CreateMap<>()
çağrısı ile) otomatik olarak yapacaktır. Elbette, eğer işler eşleşmezse, .ConstructUsing(...)
'u kullanmanın yolu budur.
public class PersonViewModel
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Person
{
public Person (int id, string name)
{
Id = id;
Name = name;
}
public int Id { get; }
public string Name { get; }
}
public class PersonProfile : Profile
{
public PersonProfile()
{
CreateMap<PersonProfile, Person>();
}
}
Not: Bu kurulum için automapper eşleştirmeleri Profiles kullandığınız varsayılmaktadır. Aşağıdaki gibi kullanıldığında
, bu doğru nesneyi üretir:
var model = new PersonModel
{
Id = 1
Name = "John Smith"
}
// will correctly call the (id, name) constructor of Person
_mapper.Map<Person>(model);
Sen resmi wiki on GitHub
iyi pratikte automapper yapımı hakkında daha fazla bilgi bulabilirsiniz https://github.com/AutoMapper/AutoMapper/wiki/Construction
AutoMapper den belgelenmiş yaklaşımlar kullanmaktırpublic class SourceDto
{
public SourceDto(int valueParamSomeOtherName)
{
Value = valueParamSomeOtherName;
}
public int Value { get; }
}
Mapper.Initialize(cfg => cfg.CreateMap<Source, SourceDto>().ForCtorParam("valueParamSomeOtherName", opt => opt.MapFrom(src => src.Value)));
- 1. bir özellik yapıcı
- 2. JMA enon eşleme nasıl yapılır?
- 3. RestKit çoktan çoğa eşleme nasıl yapılır?
- 4. Can IntelliJ, "yeni" ifadedeki yapıcı parametrelerini tamamlayabilir mi?
- 5. Yapılandırma yoluyla IServiceLocator yapıcı enjeksiyonu nasıl yapılır?
- 6. Hazırda bekletme eşlemesi veritabanıyla eşleme nasıl yapılır
- 7. Bir QML bileşeniyle eşleme nasıl yapılır
- 8. Otomatik Yanıtlayıcı eşlemesinde bir kaynak özelliğinin orijinal değeri nasıl saklanır?
- 9. Eğik 2: yerine yapıcı enjeksiyon Mülkiyet enjeksiyon
- 10. java, hazırda: bir sorgu ile özellik eşleme
- 11. Otomatik tamamlama nasıl yapılır? JSF
- 12. SQLAlchemy - salt okunur (veya hesaplanmış) özelliğe karşı eşleme nasıl yapılır
- 13. Ayar dize yerine aşağıdaki eşleme var "nvarchar"
- 14. Automapper eşleme özelliği beklenmedik şekilde kısmi özellik adı eşleşmesi eşleşmesi
- 15. Nasıl Yapılır İndeksli bir özellik ayarlama
- 16. Otomatik özellik xcode 4.4'te nasıl çalışır?
- 17. Otomatik kimlik oluşturma ve eşleme _id NEST
- 18. Otomatik ölçeklendirme grubundaki örnekleri boto ile eşleme
- 19. Özel ayarlayıcılarla AutoMapper eşleme özellikleri
- 20. Değişken adları, boru hattından sonra özelliklerle eşleme nasıl yapılır
- 21. Bir dizeyi Hazırda Bekletme dizisinde DB dizisine eşleme nasıl yapılır
- 22. Perl'deki kümeleri nasıl temsil edebilirim?
- 23. Kayıtlı yordamları görünümlere eşleme
- 24. Devexpress kontrollerinin otomatik UI testi nasıl yapılır?
- 25. YUI Otomatik Tamamlama olayları, nasıl yapılır?
- 26. IntelliJ otomatik tamamlama nasıl yapılır Javadoc
- 27. XE2'ye nasıl otomatik kaydetme yapılır?
- 28. PHP'de otomatik oturum kapatma nasıl yapılır?
- 29. yanıtlayıcı 'roller/paketler - yanıtlayıcı' Galaxy - kurulum MAC OSX hata
- 30. Yerine otomatik tamamlama aracı yii
Sanırım "ConstructUsing", automapper'ın daha yeni bir sürümde olması gerekir. kullanıyorsun. Teşekkürler Jon – jlembke
Bu örnek için çok teşekkürler Jon. "ConstructUsing" harika! DTO'larımın gizli olarak işaretlenmiş ayarlayıcılarla değişmez kalmamı sağlar. – Daniel
Benim için bir iş geliştirir; AutoMapper şu anda tüm parametrelerin isteğe bağlı olduğu yapıcıları sevmiyor, bu yüzden sadece .ConstructUsing kullanın (x => yeni MyClass()); –