2
我試圖根據自定義上下文返回不同的提供者。鑑於以下與Ninject基於對象(callcontext)返回不同的提供者(綁定)
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);
但他們沒有工作,在最好的,我得到了「無約束力」的錯誤,在最壞的情況我剛剛得到的錯誤。我確定一定有一些我很容易忽視的東西,或者只是沒有意識到。
謝謝