8
votes

Unité de disposer d'objet

Y a-t-il un moyen d'éliminer les objets injectés à la propriété dans le cadre de la déchirure?

Le fond est que je travaille sur une application utilisant ASP.NET MVC 2, Unity et WCF. Nous avons écrit notre propre usine de contrôleur MVC qui utilise l'unité pour instancier les proxies du contrôleur et de la WCF sont injectées à l'aide de l'attribut [Dépendance] sur les propriétés publiques du contrôleur. À la fin du cycle de vie de la page, la méthode Releasecontroller de l'usine de contrôleur est appelée et nous appelons iunityContainer.Eardown (ThemvCController). À ce stade, le contrôleur est disposé comme prévu, mais j'ai également besoin de disposer des proxy de la WCF injectés. (En fait, j'ai besoin d'appeler ferme et / ou avortez-les et ne pas disposer, mais c'est un problème ultérieur.)

Je pouvais bien sûr remplacer les contrôleurs d'éliminer les méthodes et nettoyer les proxies là-bas, mais je ne veux pas que les contrôleurs doivent connaître lesecycles des interfaces injectées ou même qu'ils se réfèrent aux proxies de la WCF.

Si j'ai besoin d'écrire du code moi-même pour cela - quel serait le meilleur point d'extension? J'apprécierais n'importe quel pointeur.


0 commentaires

3 Réponses :


2
votes

J'ai créé une extension d'unité qui s'occupera de disposer des instances créées par le conteneur en démolition.

voir http : //www.neovolve.com/2010/06/18/Unity-Entension-for-Disposant-Build-trees-on-eardown/


0 commentaires

0
votes

Une solution de contournement éventuelle est que vous pouvez également écrire une enveloppe autour de vos proxies qui permettront de disposer (appelée par unité lorsque l'élimination des instances) appelle une méthode de proxy de près. Est-ce un scénario viable pour vous?


0 commentaires

0
votes

Une fois que vous avez votre UnityDependencyResolver xxx pré>

Vous pouvez ensuite appeler le résolveur. Dans ASP.NET, vous pouvez choisir d'appeler ceci à partir de votre mode global.Asax.cs Application_end strong> Méthode comme suit: P>

var myFooInstance = new Foo();
container.RegisterInstance<IFoo>(myFooInstance);


0 commentaires