我正在尝试根据自定义上下文返回不同的提供程序。鉴于以下
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; }
}
我的绑定看起来像这样
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);
我相当肯定它到此为止是正确的,尽管为时已晚,而且我没有想法。
我的问题是得到那些绑定。我尝试了各种方法
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);
但是它们不起作用,充其量我得到“无绑定”错误,最坏的情况是我得到错误。我敢肯定,一定有一些容易被我忽略的东西,或者只是没有意识到。
谢谢