Non public setter
Mapster can map to non public setter automatically.
public class Order {
public string Id { get; set; }
public ICollection<OrderItem> Items { get; private set; }
}
Using UseDestinationValue attribute
You can make your type pure readonly and annotate with [UseDestinationValue].
public class Order {
public string Id { get; set; }
[UseDestinationValue]
public ICollection<OrderItem> Items { get; } = new List<OrderItem>();
}
Convention based setup using UseDestinationValue Extension Method
Or you can apply without annotate each type, for example, if you would like all readonly ICollection<> to use destination value.
TypeAdapterConfig.GlobalSettings.Default
.UseDestinationValue(member => member.SetterModifier == AccessModifier.None &&
member.Type.IsGenericType &&
member.Type.GetGenericTypeDefinition() == typeof(ICollection<>));
Using UseDestinationValue [v10.0.4+]
TypeAdapterConfig.GlobalSettings
.ForDestinationType<Order>()
.UseDestinationValue(dest=>dest.Items);