gpt4 book ai didi

c# - 使用 Ninject 基于对象(callcontext)返回不同的提供者(绑定(bind))

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

我正在尝试根据自定义上下文返回不同的提供程序。鉴于以下

public interface IProvider
{
string WhoAreYou();
}

还有两个供应商

namespace ProviderOne
{
public class Implementation : IProvider
{
public string WhoAreYou()
{
return "Provider One";
}
}
}

namespace ProviderTwo
{
public class Implementation : IProvider
{
public string WhoAreYou()
{
return "Provider Two";
}
}
}

上下文如下

public class CallContext
{
public string SomeValue{ get; set; }
public int AnotherValue { get; set; }
}

我的绑定(bind)看起来像这样

        CallContext context1 = new CallContext()
{
SomeValue = "one",
AnotherValue = 1
};

Bind<IProvider>().To<ProviderOne.Implementation>().WithMetadata("callcontext", context1);

CallContext context2 = new CallContext()
{
SomeValue = "two",
AnotherValue = 2
};

Bind<IProvider>().To<ProviderOne.Implementation>().WithMetadata("callcontext", context2);

我相当确定到目前为止它是正确的,虽然已经晚了,而且我没有想法。

我的问题是获取这些绑定(bind)。我尝试了各种方法

        var test1 = kernel.Get<IProvider>(b => b.Get<CallContext>("callcontext") == context1);
//var test1 = kernel.Get<IProvider>(m => m.Has("callcontext") && m.Get<CallContext>("callcontext").Equals(context1));
//var test1 = kernel.Get<IProvider>(m => m.Get<CallContext>("callcontext").Equals(context1));
//var test1 = kernel.Get<IProvider>().Equals(context1);

但它们不起作用,充其量我会收到“无绑定(bind)”错误,最坏情况下我只会收到错误。我确定一定有一些容易被我忽略的东西,或者只是没有意识到。

谢谢

最佳答案

我发现了这个问题,如果将来有人遇到这个问题,上面的解决方案很好,除了你必须显式覆盖 Ninject 的 Equals 来解析对象。如下。

    public override bool Equals(object obj)
{
if (obj.GetType() == typeof(CallContext))
{
var context = (CallContext)obj;

if (Country != null)
{
if (Country.ToLower() != context.Country.ToLower())
return false;
}


if (Store != context.Store)
return false;


return true;
}

return false;
}

那么你就可以按照建议解决了。

    CallContext context1 = new CallContext()
{
SomeValue = "one",
AnotherValue = 1
};

var test1 = kernel.Get<IProvider>(b => b.Get<CallContext>("callcontext").Equals(context1));

关于c# - 使用 Ninject 基于对象(callcontext)返回不同的提供者(绑定(bind)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11166262/

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