gpt4 book ai didi

c# - 尝试将接口(interface)映射到 Unity 中的类类型时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:36 25 4
gpt4 key购买 nike

问题背景:

我只是在设置一个 Unity 容器对象,注册所选接口(interface)的类型和继承它的类,然后尝试返回它的实现。

代码:

统一:

namespace ABC.Tools.VersionControl
{
internal class Unity
{
internal static ITfsVcPromotionManager CreateUnityObjects()
{
var unityContainer = new UnityContainer();

unityContainer.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>();

//****ERROR*****
return unityContainer.Resolve<ITfsVcPromotionManager>();
}
}
}

接口(interface) - ITfsVcPromotionManager:

namespace ABC.Tools.VersionControl.TfsVersionControl
{
interface ITfsVcPromotionManager
{
void CheckoutTfsItem(IVersionControlItem tfsItem);

int CheckinTfsItem(IVersionControlItem tfsItem);
}
}

继承上述接口(interface)的类——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 是一个接口(interface),无法构造。您是否缺少类型映射?

谁能告诉我为什么这不能从界面正确映射?

最佳答案

它提示无法解析 ITfsVcQaCheckoutWorker

您完成的唯一统一映射是ITfsVcPromotionManager。当您解析接口(interface)时,它会创建一个 TfsVcPromotionManager 实例,其构造函数接受另外两个接口(interface):ITfsVcQaCheckinWorkerITfsVcQaCheckoutWorker

你还没有用 unity 注册那些接口(interface)(又名类型映射),所以它不知道如何为它们构造一个具体的类。

我不知道你的其他类的名称是什么,但你应该能够在另一个类之后立即注册它们:

internal static ITfsVcPromotionManager CreateUnityObjects()
{
var unityContainer = new UnityContainer();

unityContainer.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>();
unityContainer.RegisterType<ITfsVcQaCheckinWorker, TfsVcQaCheckinWorker>();
unityContainer.RegisterType<ITfsVcQaCheckoutWorker, TfsVcQaCheckoutWorker>();

return unityContainer.Resolve<ITfsVcPromotionManager>();
}

关于c# - 尝试将接口(interface)映射到 Unity 中的类类型时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com