【发布时间】:2010-04-01 19:02:35
【问题描述】:
当我尝试实例化我的基类实例时,出现错误:
ResolutionFailedException 大致如下错误“尝试调用构造函数时无法解析参数主机”
我目前没有为基类型使用接口,并且我的类实例正在继承基类型类。我是 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])失败:无法解析属性“Calculate”的值。 (策略类型 BuildPlanStrategy,索引 3)
【问题讨论】:
-
删除我的答案,直到我能想到一些真正有用的东西。 ;)
-
Np,为了简单起见,我删除了 CalculateApi 的构造函数
标签: c# xml dependency-injection .net-4.0 unity-container