Cómo mantener el valor de la fuente cuando use inyectedfrom -- asp.net-mvc-3 campo con valueinjecter camp Relacionados El problema

How to keep the value of the source when using InjectFrom


1
vote

problema

Español

Al inyectar valores en mi objeto de dominio, mantendría los valores de algunas propiedades.

Ejemplo:

Modelo de dominio

  $(function () {     $('.js-popover-trigger').popover({         html: true,         content: function () {             return $('#popup-content').html();         }     }); }); 2  

Ver modelo

  $(function () {     $('.js-popover-trigger').popover({         html: true,         content: function () {             return $('#popup-content').html();         }     }); }); 3  

muestra

  $(function () {     $('.js-popover-trigger').popover({         html: true,         content: function () {             return $('#popup-content').html();         }     }); }); 4  
Original en ingles

By injecting values xe2x80x8bxe2x80x8binto my domain object, I would keep the values xe2x80x8bxe2x80x8bof some properties.

Example:

Domain model

public class Person {     public string Name { get; set; }     public Guid ID { get; set; }     public DateTime CreateAt { get; set; }     public string Notes { get; set; }     public IList<string> Tags { get; set; } } 

View Model

public class PersonViewMode {     public string Name { get; set; }     public Guid ID { get; set; }     public DateTime CreateAt { get; set; }     public string Notes { get; set; }     public IList<string> Tags { get; set; }      public PersonViewMode() { ID = Guid.NewGuid(); } //You should use this value when it is the Target } 

Sample

var p = new Person             {                 ID = Guid.NewGuid() //Should be ignored!                 ,                 Name = "Riderman"                 ,                 CreateAt = DateTime.Now                 ,                 Notes = "teste de nota"                 ,                 Tags = new[] {"Tag1", "Tag2", "Tag3"}             };  var pvm = new PersonViewMode();  pvm.InjectFrom(p); //Should use the ID value generated in the class constructor PersonViewMode 
     

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Si elimina el set; desde la identificación de ViewModel, no se establecerá;

De lo contrario, podría guardar el valor de la ID en una variable separada y volver a ponerla después de inyectar,

O puede crear un valor de valor personalizado que ignoraría "ID" o recibiría una lista de propiedades para ignorar como un parámetro


Aquí está el ejemplo para una inyección personalizada que recibe una lista de nombres de propiedades para ignorar:

  public class MyInj : ConventionInjection {     private readonly string[] ignores = new string[] { };      public MyInj(params string[] ignores)     {         this.ignores = ignores;     }      protected override bool Match(ConventionInfo c)     {         if (ignores.Contains(c.SourceProp.Name)) return false;         return c.SourceProp.Name == c.TargetProp.Name && c.SourceProp.Type == c.TargetProp.Type;     } }   

y úsalo así:

  pvm.InjectFrom(new MyInj("ID"), p);   

Si necesita ignorar más, puede hacerlo así:

  pvm.InjectFrom(new MyInj("ID","Prop2","Prop3"), p);    
 

if you delete the set; from from the ViewModel's ID then it won't be set;

otherwise you could save the value of ID in a separate variable and put it back after injecting,

or you can create a custom valueinjection that would ignore "ID" or would receive a list of properties to ignore as a parameter


here's the example for a custom injection that receives a list of property names to ignore:

public class MyInj : ConventionInjection {     private readonly string[] ignores = new string[] { };      public MyInj(params string[] ignores)     {         this.ignores = ignores;     }      protected override bool Match(ConventionInfo c)     {         if (ignores.Contains(c.SourceProp.Name)) return false;         return c.SourceProp.Name == c.TargetProp.Name && c.SourceProp.Type == c.TargetProp.Type;     } } 

and use it like this:

pvm.InjectFrom(new MyInj("ID"), p); 

if you need to ignore more, you can do like this:

pvm.InjectFrom(new MyInj("ID","Prop2","Prop3"), p);  
 
 
 
 

Relacionados problema

2  Marco para fusionar entidades comerciales  ( Framework for merging business entities ) 
¿Hay algún marco que pueda hacer lo siguiente: var source = new Entity() { StringProp = null, IntProp = 100, }; var target = new Entity() { S...

3  Marco de la entidad objeto separado de la fusión  ( Entity framework detached object merging ) 
Tengo un escenario donde estoy usando un marco de entidad en un servicio WCF, y los cambios ocurren en una instancia que no se puede rastrear de un tipo que s...

1  Objetos de clonación profundos con niños  ( Deep cloning objects with children ) 
Estoy buscando una solución si puedo copiar un objeto con varios niveles de niños, actualizar la clave principal (y la clave externa de los niños) y guardarla...

6  Inyectar desde expanobject con valor inicial  ( Inject from expandoobject with valueinjecter ) 
Estoy usando el valorinigrio para el mapeo de objetos y estoy tratando de inyectar de un expansión de expansión. Encontré un ejemplo de inyección de una dinám...

1  ValiniNyRymer ViewModel a EF Poco  ( Valueinjecter viewmodel to ef poco ) 
Tengo el siguiente vismodel: public class MessageViewModel { public string Text { get; set; } public int ContactID { get; set; } } public class Me...

3  ¿Cómo bucle a través de un hashset <t> cuando se proporciona como un objeto y el T puede ser algo?  ( How to loop through a hashsett when it is provided as an object and the t can ) 
Estoy usando inyectores de valor en el mapa de 1 tipo a otro utilizando el método LoopValueinyRyy y anulación del método SetValue (objeto V) con alguna lógica...

8  Uso de ValinInyjetor para mapear entre objetos con diferentes nombres de propiedades  ( Using valueinjecter to map between objects with different property names ) 
¿Cómo mapeo una propiedad de un objeto a otro objeto con un nombre de propiedad diferente? Tengo una clase public class ProductSpecificationAddViewModel { ...

5  ValiniNycripter: ¿Dónde debo descargar los binarios? CODEPLEX O NUDET?  ( Valueinjecter where should i download the binaries codeplex or nuget ) 
Creo que tengo 2 opciones: 1) Descargar desde CodePlex: http://valueinjer.codeplex.com/ 2) Descargar desde Nuget Official Package Fuente (Actualmente, l...

4  ¿Las propiedades de la colección de mapas de inyectores de valor?  ( Does value injecter map collection properties ) 
Estoy tratando de asignar una colección de objetos en entidades con una colección de modelos de vista. public class Channel { public Guid Id { get; se...

0  MAP NULL usando el ValiniNymer  ( Map null using valueinjecter ) 
¿Cómo mape un nulo a un objeto usando el valorinjunto? Lanza un error cuando hago esto. ¿Necesito usar algo más que InjectFrom() ? Más información Te...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos