Когда я пытаюсь создать экземпляр моего базового класса, я получаю сообщение об ошибке:
a ResolutionFailedException с примерно следующей ошибкой «Не удалось разрешить параметр host при попытке вызвать конструктор»
В настоящее время я не использую интерфейс для базового типа, и мой экземпляр класса наследует класс базового типа. Я новичок в Unity и DI, так что я думаю, что это то, что я, возможно, забыл.
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>();
и файл 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>
Базовый класс
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();
}
}
}
Реализация
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; }
}
}
Да, и базовый класс, и реализация находятся в одном и том же Пространстве имен, и это что-то мудрое в дизайне, которое изменится, как только я получу эту работу.
Ох и более подробная ошибка
Не удалось разрешить зависимость, type = "Calculator.Logic.BaseCalculatorServer", name = "". Сообщение об исключении: Текущая операция сборки (ключ сборки Build Key [Calculator.Logic.BaseCalculatorServer, null]) завершилась неудачно: значение свойства «Рассчитать» не может быть разрешено. (Тип стратегии BuildPlanStrategy, индекс 3)