Propriété d'Injection dans Asp.Net de Base
Je suis en train de le port d'un asp.net application à asp.net de base. J'ai bien l'injection (à l'aide de ninject) sur mon UnitOfWork mise en œuvre de ce genre.
[Inject]
public IOrderRepository OrderRepository { get; set; }
[Inject]
public ICustomerRepository CustomerRepository { get; set; }
Est-il un moyen pour obtenir la même fonctionnalité à l'aide de construire en DI sur .net de base? Aussi est-il possible d'utiliser de la convention en fonction de liaison?
Connexes: stackoverflow.com/questions/39849142/...
OriginalL'auteur | 2016-07-19
Vous devez vous connecter pour publier un commentaire.
Aucune, le haut-DI/conteneur IoC est intentionnellement simple dans l'utilisation et de fonctionnalités à offrir une base pour d'autres DI conteneurs de plug-in.
Donc il n'y a pas de prise en charge intégrée pour: Auto-Découverte, Auto-Inscriptions, des Décorateurs ou des Injecteurs, ou de la convention en fonction des inscriptions. Il n'y a pas de plans pour l'ajouter à la intégré dans un conteneur pourtant, autant que je sache.
Vous aurez à utiliser un tiers de récipient avec la propriété de l'injection de soutien.
Veuillez noter que la propriété de l'injection est considérée comme mauvaise dans 98% de tous les cas de figure, car il cache les dépendances et il n'y a aucune garantie que l'objet sera injecté lorsque la classe est créée.
Avec le constructeur de l'injection, vous pouvez appliquer ce par le constructeur et vérifier la valeur null et le pas de créer une instance de la classe. Avec la propriété de l'injection, c'est impossible et lors de tests unitaires ses pas évident que les services/les dépendances de la classe, quand ils ne sont pas définis dans le constructeur, donc facile à manquer et obtenir
NullReferenceExceptions
.La seule raison valable pour Bien d'Injection que j'ai jamais trouvé a été d'injecter de services dans des classes proxy généré par un tiers de la bibliothèque, c'est à dire proxys WCF créé à partir d'une interface où vous n'avez aucun contrôle sur la création de l'objet.
Éviter partout d'autre.
Considérez-vous l'enregistreur de injectés via la propriété d'une mauvaise pratique? Je trouve ça très raisonnable
Oui, à mon humble avis sa mauvaise (ou plutôt inférieures) au constructeur d'injection. Je veux dire soit votre application a besoin de l'exploitation forestière ou pas. Avec la nouvelle .NET, Base de journalisation c'est juste plus facile, vous pouvez injecter
ILogger<T>
météorologiques ou non configuré n'est pas question d'un point de l'application et vous aurez toujours la garantie que l'objet ne sera pasnull
, donc pas besoin pour les nuls la vérification ou la valeur null, la coalescence de l'opérateurOriginalL'auteur Tseng
Pas, mais ici, c'est comment vous pouvez créer votre propre
[inject]
attributs avec l'aide de autofac propriété de l'injection mécanisme.D'abord Créer votre propre
InjectAttribute
:Puis de créer votre propre
InjectPropertySelector
qui utilise la réflexion pour vérifier les propriétés marquées avec[inject]
:Puis utilisez votre sélecteur à votre
ConfigureServices
lorsque vous câblez votreAutofacServiceProvider
:Enfin dans votre service, vous pouvez maintenant utiliser
[inject]
:Certainement que vous pouvez prendre cette solution encore plus loin, par exemple en utilisant un attribut pour spécifier votre service de cycle de vie au-dessus de votre service à la définition de la classe...
...et puis vérification de cet attribut lors de la configuration de vos services via autofac. Mais ce serait aller au-delà de la portée de cette réponse.
OriginalL'auteur B12Toaster