La classe générique en tant que base provoque une erreur XAML

J’ai les classes customer et product . Leurs similitudes sont dans la classe Base Record . Cependant, les types dans Base Record dépendent toujours du customer ou du product . Par conséquent, j’ai l’enregistrement de Base Record créé génériquement.

Dès que le customer ou le product hérite de l’ Base Record de Base Record , l’erreur XMAL apparaît dans mon projet WPF. Malheureusement, je ne sais pas pourquoi, pourquoi j’écris ici;)

En-tête de baseRecord:

 public abstract class BaseRecord : Notify where T : class, new() 

En-tête de client:

 public class Customer : BaseRecord 

Erreur XAML:

  Unknown build error, 'Cannot resolve dependency to assembly 'Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' 

ET:

 The tag 'CustomerAddWindow' does not exist in XML namespace 'clr-namespace:Business_Layer.Windows.Customer;assembly=Business_Layer' 

Si je fais de la classe BaseRecord non générique tout fonctionne comme je veux.

en XAML, j’instancie

  

Bonne année.

XAML ne prend pas directement en charge les génériques.

Certains projets parallèles visent à résoudre ce problème, mais j’ai toujours choisi de vivre avec. Cela n’a jamais vraiment gêné l’architecture de mes applications.

Une solution de contournement qui, à mon avis, est simple et efficace consiste à avoir une classe de type inheritance qui résout le générique.

Par exemple,

 public abstract class BaseRecord : Notify where T : class, new() public abstract class CustomerBase : BaseRecord public class Customer : CustomerBase 

Je développe actuellement une application WPF et je n’ai besoin d’aucun générique dans mes XAML.

J’ai zéro code dans le code xaml-behind. Vraiment, ma classe de fenêtre de base a du code derrière toutes les interfaces utilisateur en raison de certaines personnalisations.

Si vous suivez l’architecture MVVM , générique, qui est susceptible d’être une propriété de votre fenêtre de base, devrait appartenir très probablement à la classe ViewModel.

J’ai trouvé l’erreur et je veux montrer ma solution:

J’ai ajouté la référence à mon projet WPF où sont mes classes que j’utilise dans le générique.

Mon architecture est:

Business_Layer pour la logique métier

Data_Layer pour gérer mes données à partir de DB

Presentation_Layer as View.

Je n’ai pas référencé Data_Layer à Presentation_Layer car il n’y en avait pas besoin. Mais lorsque vous utilisez une classe générique dans le projet WPF, WPF peut le résoudre.

C’était la première erreur que je voulais dire:

  Unknown build error, 'Cannot resolve dependency to assembly 'Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' 

Je ne sais pas pourquoi, mais après avoir ajouté cette référence à data_layer dans presentation_layer, je n’ai plus besoin de la classe de solution de contournement. je peux utiliser

 public class CustomerBase : BaseRecord 

directement sans aucune erreur.