2009-10-08 11 views
8

Quelqu'un peut-il aider?Bibliothèque Unity et WCF: où charger l'unité dans une bibliothèque wcf?

J'ai créé une bibliothèque WCF (pas d'application) et je vais l'hébergement ceci dans une page SVC IIS ..

Mais je voulais charger la substance de l'unité en place générique ... Je pourrais le charger dans le global.asax mais alors son lié au conteneur IIS Asp.net et quand TDD cette partie ne s'exécuterait pas ainsi de mes résolutions ne fonctionneraient pas.

La bibliothèque WCF est une pure classe, donc je doute que je puisse utiliser des événements comme OnStartup etc?

La seule façon que je pensais à ce que d'avoir le service hériter d'une classe de base et l'interface qui appellerait une classe statique d'une sorte et faire le bootstrapping pour l'unité ..

Je suis un peu perdu, Est-ce le seul moyen ou y a-t-il un moyen que je ne connais pas?

Fondamentalement, l'idée est ... Qui appelle jamais la bibliothèque WCF puis l'injection de l'unité doit se produire ..

Toutes les idées?

Merci

Répondre

5

Il existe plusieurs façons de résoudre ce problème. Voici vous deux meilleures options:

Vous pouvez créer un ServiceHost personnalisé et passer outre InitializeRuntime

Vous pouvez créer une classe appelée ApplicationStart dans votre répertoire App_Code avec une méthode statique publique AppInitialize (il est un peu une odeur, bien que):

public static class ApplicationStart 
{ 
    public static void AppInitialize() 
    { 
     // Initialise IoC container 
    } 
} 

Wenlong Dong a other methods on his blog.

+0

merci, je vais utiliser InitializeRuntime –

0

Vous pouvez utiliser un IInstanceProvider pour créer des objets de service à l'aide de l'unité ou un autre conteneur du CIO. Consultez le blog this pour plus de détails sur la façon de procéder.

Ensuite, vous pouvez utiliser IContractBehavior implémenté en tant qu'attribut pour ajouter IInstanceProvider à DispatchRuntime en définissant InstanceProvider dans la méthode ApplyDispatchBehavior.

0

Il existe maintenant un package NuGet open source appelé Unity.WCF qui peut prendre soin de cela pour vous.

Voir http://unitywcf.codeplex.com/ pour plus d'informations et le code source.