Lorsque je tente d'instancier mon instance de la classe de base, je reçois l'erreur:Unity L'hôte de paramètre ne peut pas être résolu lors d'une tentative de constructeur appeler
un ResolutionFailedException avec à peu près l'erreur suivante « L'hôte de paramètres ne peuvent pas être résolu lors de la tentative d'appel du constructeur "
Je n'utilise actuellement pas d'interface pour le type de base et mon instance de la classe hérite de la classe de type de base. Je suis nouveau à Unity et DI donc je pense que c'est quelque chose que j'ai oublié peut-être.
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "Unity.Config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
UnityConfigurationSection section = (UnityConfigurationSection)config.GetSection("unity");
IUnityContainer container = new UnityContainer();
section.Containers.Default.Configure(container);
//Throws exception here on this
BaseCalculatorServer server = container.Resolve<BaseCalculatorServer>();
et le fichier Unity.Config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--Unity Configuration-->
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity>
<containers>
<container>
<types>
<type name ="CalculatorServer" type="Calculator.Logic.BaseCalculatorServer, Calculator.Logic" mapTo="Calculator.Logic.CalculateApi, Calculator.Logic"/>
</types>
</container>
</containers>
</unity>
</configuration>
La classe de base
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Transactions;
using Microsoft.Practices.Unity;
using Calculator.Logic;
namespace Calculator.Logic
{
public class BaseCalculatorServer : IDisposable
{
public BaseCalculatorServer(){}
public CalculateDelegate Calculate { get; set; }
public CalculationHistoryDelegate CalculationHistory { get; set; }
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
this.Dispose();
}
}
}
La mise en œuvre
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Calculator.Logic;
using System.ServiceModel;
using System.ServiceModel.Configuration;
using Microsoft.Practices.Unity;
namespace Calculator.Logic
{
public class CalculateApi:BaseCalculatorServer
{
public CalculateDelegate Calculate { get; set; }
public CalculationHistoryDelegate CalculationHistory { get; set; }
}
}
Oui à la fois classe de base et la mise en œuvre sont dans le même Namespace et c'est quelque chose de design sage qui va changer une fois que j'obtiendrai ce travail. Oh et une erreur plus détaillée
La résolution de la dépendance a échoué, tapez = "Calculator.Logic.BaseCalculatorServer", name = "". Le message d'exception est: L'opération de génération en cours (clé de construction Build Key [Calculator.Logic.BaseCalculatorServer, null]) a échoué: La valeur de la propriété "Calculate" n'a pas pu être résolue. (Type de stratégie BuildPlanStrategy, indice 3)
J'ai supprimé ma réponse jusqu'à ce que je puisse penser à quelque chose d'utile. ;) –
Np, j'ai enlevé le constructeur pour le CalculateApi par souci de simplicité – Terrance