【发布时间】:2013-12-19 23:55:01
【问题描述】:
问题背景:
我只是简单地设置一个 Unity 容器对象,注册所选接口的类型和继承它的类,然后尝试返回它的实现。
代码:
团结:
namespace ABC.Tools.VersionControl
{
internal class Unity
{
internal static ITfsVcPromotionManager CreateUnityObjects()
{
var unityContainer = new UnityContainer();
unityContainer.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>();
//****ERROR*****
return unityContainer.Resolve<ITfsVcPromotionManager>();
}
}
}
界面 - ITfsVcPromotionManager:
namespace ABC.Tools.VersionControl.TfsVersionControl
{
interface ITfsVcPromotionManager
{
void CheckoutTfsItem(IVersionControlItem tfsItem);
int CheckinTfsItem(IVersionControlItem tfsItem);
}
}
继承上述接口的类——TfsVcPromotionManager
namespace ABC.Tools.VersionControl.TfsVersionControl
{
internal class TfsVcPromotionManager:ITfsVcPromotionManager
{
private ITfsVcQaCheckoutWorker _checkoutWorker;
private ITfsVcQaCheckinWorker _checkInWorker;
private VersionControlServer _tfsServer;
private TfsVcCheckoutItem _checkoutItem = new TfsVcCheckoutItem();
public TfsVcPromotionManager(/*IVersionControlItem tfsItem*/ ITfsVcQaCheckoutWorker checkOutWorker, ITfsVcQaCheckinWorker checkInWorker, VersionControlServer tfsServer)
{
if (checkOutWorker == null || tfsServer == null)
{
throw new System.ArgumentException("tfsItem or tfsServer objects cannot be null");
}
_checkoutWorker = checkOutWorker;
_checkInWorker = checkInWorker;
_tfsServer = tfsServer;
}
public void CheckoutTfsItem(IVersionControlItem tfsItem)
{
if (tfsItem == null)
{
throw new System.ArgumentException("TfsItem cannot be null.");
}
_checkoutWorker.CheckoutTfsQaItem(_tfsServer);
}
public int CheckinTfsItem(IVersionControlItem tfsItem)
{
if (tfsItem == null)
{
throw new System.ArgumentException("tfsItem cannot be null.");
}
return _checkInWorker.CheckinTfsQaItem(tfsItem);
}
}
错误信息:
结果信息: 测试方法 ABCTestProject.TFStests.Check_Interface_CheckOut_Method 抛出异常: Microsoft.Practices.Unity.ResolutionFailedException:依赖项解析失败,类型 =“Adp.Tools.VersionControl.TfsVersionControl.ITfsVcPromotionManager”,名称 =“(无)”。 异常发生时:解决时。 异常是: InvalidOperationException - 当前类型 ABC.Tools.VersionControl.ITfsVcQaCheckoutWorker 是一个接口,无法构造。您是否缺少类型映射?
谁能告诉我为什么这不能从界面正确映射?
【问题讨论】:
-
你试过注册构造函数参数吗?看起来 Unity 不知道如何构建构造函数所需的参数。
标签: c# unity-container