2010-10-27 16 views
0

J'utilise mon app.config pour dire l'unité de mon interface de type mappings ...unité d'injection à l'aide d'un fichier de configuration - résoudre la dépendance ne peux pas

<unity> 
<containers> 
    <container> 
    <types> 
     <type type="UnityDAL.Interfaces.IDataContextFactory, UnityDAL" 
     mapTo="UnityDAL.UnityDemoDataContextFactory, UnityDAL" /> 
     <type type="UnityDAL.Interfaces.IProductRepository, UnityDAL" 
     mapTo="UnityDAL.ProductRepository, UnityDAL" /> 
     <type name="productRepo" 
     type="UnityDAL.Interfaces.IProductRepository, UnityDAL" 
     mapTo="UnityDAL.ProductRepository, UnityDAL" /> 

    and so on... 

en utilisant ce code

var wrapper = UnityWrapper.Create(); 
var productRepository = 
    wrapper.Container.Resolve<IProductRepository>("productRepo"); 
var productsBO = new ProductBO(productRepository); 
var products = productsBO.GetAllProducts(); 

Voici le constructeur de l'objet wrapper ...

public UnityWrapper() 
{ 
    _container = new UnityContainer(); 
    var section = 
     (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); 
    section.Containers.Default.Configure(_container); 
} 

mais je reçois une exception qui dit ...

{"La résolution de la dépendance a échoué, tapez = \" IProductRepository \ ", name = \" productRepo \ ". Message d'exception est: L'opération de construction en cours (build clé clé de construction [UnityDAL.ProductRepository, productRepo]) a échoué: Le paramètre dataContextFactory ne pouvait pas être résolu lors d'une tentative d'appeler constructeur UnityDAL.ProductRepository (. UnityDAL.Interfaces IDataContextFactory dataContextFactory) . (Type de stratégie Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy, indice 2) "}

Je pensais que ce noeud était câblage jusqu'à

<type type="UnityDAL.Interfaces.IDataContextFactory, UnityDAL" 
    mapTo="UnityDAL.UnityDemoDataContextFactory, UnityDAL" /> 

L'idée ici était à l'origine pour créer une belle chaîne de dépendance. Toute idée ce que je fais mal? Si vous avez des conseils ou des conseils sur la façon dont je peux corriger le problème, je voudrais les entendre. Merci pour toute aide.

Cheers,

~ ck à San Diego

+0

Est-ce que productRepo de type 'IDataContextFactory'? Vous devez transmettre un 'IDataContextFactory' ou définir le constructeur dans le fichier de configuration Unity. – Martin

Répondre

1

Ceci est un problème de mappage.

En essayant de résoudre le UnityDAL.Interfaces.IProductRepository, vous devez d'abord résoudre UnityDAL.Interfaces.IDataContextFactory. Ensuite, en essayant de résoudre UnityDAL.UnityDemoDataContextFactory, vous manquez un mappage. Probablement le ctor de UnityDAL.UnityDemoDataContextFactory nécessite quelque chose qui n'a pas été enregistré. Par ailleurs: ce que vous faites ici est l'utilisation un emplacement de service.

J'évite cette pratique si possible, mais si vous absolument besoin de cela, alors essayez de exposer le common service locator. Cette DLL est livré avec Unity et fournit un localisateur de service simple SEULEMENT interface.