Automapper - Mappeur déjà initialisé erreur
Je suis en utilisant AutoMapper 6.2.0 dans mon ASP.NET MVC 5 application.
Quand je l'appelle mon point de vue par le contrôleur, il montre toutes les choses. Mais, lorsque j'actualise ce point de vue, Visual Studio affiche une erreur:
Système.InvalidOperationException: 'Mappeur déjà initialisé. Vous devez appeler Initialiser une fois par domaine d'application/processus".
Je suis en utilisant AutoMapper dans un seul contrôleur. Pas de configuration dans un lieu encore, ni utilisé AutoMapper dans un autre service ou à la manette.
Mon contrôleur:
public class StudentsController : Controller
{
private DataContext db = new DataContext();
//GET: Students
public ActionResult Index([Form] QueryOptions queryOptions)
{
var students = db.Students.Include(s => s.Father);
AutoMapper.Mapper.Initialize(cfg =>
{
cfg.CreateMap<Student, StudentViewModel>();
});
return View(new ResulList<StudentViewModel> {
QueryOptions = queryOptions,
Model = AutoMapper.Mapper.Map<List<Student>,List<StudentViewModel>>(students.ToList())
});
}
//Other Methods are deleted for ease...
Erreur dans le contrôleur:
Ma classe de Modèle:
public class Student
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string CNIC { get; set; }
public string FormNo { get; set; }
public string PreviousEducaton { get; set; }
public string DOB { get; set; }
public int AdmissionYear { get; set; }
public virtual Father Father { get; set; }
public virtual Sarparast Sarparast { get; set; }
public virtual Zamin Zamin { get; set; }
public virtual ICollection<MulaqatiMehram> MulaqatiMehram { get; set; }
public virtual ICollection<Result> Results { get; set; }
}
Mon ViewModel Classe:
public class StudentViewModel
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string CNIC { get; set; }
public string FormNo { get; set; }
public string PreviousEducaton { get; set; }
public string DOB { get; set; }
public int AdmissionYear { get; set; }
public virtual FatherViewModel Father { get; set; }
public virtual SarparastViewModel Sarparast { get; set; }
public virtual ZaminViewModel Zamin { get; set; }
}
OriginalL'auteur Rahmat Ali | 2017-11-11
Vous devez vous connecter pour publier un commentaire.
Lorsque vous actualisez la vue de la création d'une nouvelle instance de la
StudentsController
-- et, par conséquent, à la réinitialisation de votre Mapper, donnant le message d'erreur "Mapper" déjà initialisé".De la Guide De Mise En Route
Un moyen pour cela est de placer l'ensemble de vos configurations de mappage dans une méthode statique.
App_Start/AutoMapperConfig.cs:
Puis appeler cette méthode dans le Mondiale.asax.cs
Maintenant, vous pouvez l'utiliser dans vos actions de contrôleur.
OriginalL'auteur Jasen
Si vous voulez ou avez besoin de coller avec le statique de la mise en œuvre d'une unité de scénario de test, notez que vous pouvez appeler
AutoMapper.Mapper.Reset()
avant d'appeler initialiser. Notez que cela ne devrait pas être utilisé dans la production de code comme indiqué dans la documentation.Source: http://docs.automapper.org/en/stable/Configuration.html#resetting-static-mapping-configuration
OriginalL'auteur dasch88
J'ai utilisé cette méthode avant et cela a fonctionné jusqu'à la version 6.1.1
Depuis la version 6.2, cela ne fonctionne pas plus. Pour utiliser correctement Automapper créer un nouveau Mappeur et nous présente une comme ceci:
Content que ce post vous a aidé. Un upvote serait greate. Thx
Excellente solution. Mais pourquoi Auto mappeur de modifier sa configuration de base.
OriginalL'auteur Michael Mittermair
Dans le cas où vous avez vraiment besoin de "ré-initialiser"
AutoMapper
vous devriez passer à l'instance de base de l'API pour éviterSystem.InvalidOperationException
:Mapper already initialized. You must call Initialize once per application domain/process.
Par exemple, lors de la création de la
TestServer
pourxUnit
tests, vous pouvez simplement mettreServiceCollectionExtensions.UseStaticRegistration
à l'intérieur defixure
constructeur de la classe defalse
de faire le tour:OriginalL'auteur Dmitry Pavlov
Vous pouvez utiliser automapper comme Statique API et Instance de l'API ,
Mappeur déjà initialisé est un problème courant dans la charge Statique de l'API , vous pouvez utiliser mappeur.Reset()
lorsque vous avez initialisé mappeur mais ce n'est pas la réponse à tout.
Juste essayer avec de l'instance de l'API
OriginalL'auteur Thisara Subath
Pour les Tests Unitaires, vous pouvez ajouter du Mappeur.Reset() de votre unité de la classe de test
OriginalL'auteur Butsaty
Automapper version 8.0.0
OriginalL'auteur shiv
Vous pouvez simplement utiliser
Mapper.Reset()
.Exemple:
OriginalL'auteur sagar
Si vous utilisez Mappeur dans UnitTest et vos tests plus d'un, Vous pouvez utiliser
Mapper.Reset()
OriginalL'auteur adaniak
Si vous utilisez MsTest vous pouvez utiliser le AssemblyInitialize attribut de sorte que la cartographie devient configuré qu'une seule fois pour que l'assemblée (ici test de l'assemblée). C'est généralement ajouté à la classe de base de contrôleur de tests unitaires.
J'espère que cette réponse permet de
OriginalL'auteur Darshan Sudhakar