我不太确定如何问这个问题,所以我将发布我的代码示例并简要描述我正在尝试做的事情。我有以下绑定设置:
kernel.Bind<IAuthenticationService>().To<FormsAuthenticationService>();
kernel.Bind<IAuthenticationService>().To<TokenAuthenticationService>().When(r => HasAncestorOfType<MyWebApiController>(r));
这是 HasAncestorOfType 的代码(尽管我认为这无关紧要):
private static bool HasAncestorOfType<T>(IRequest request)
{
if (request.Target == null)
return false;
if (request.Target.Member.ReflectedType == typeof(T))
return true;
return HasAncestorOfType<T>(request.ParentRequest);
}
这些绑定都按预期工作(IAuthenticationService
绑定到,FormsAuthenticationService
除非被注入MyWebApiController
,在这种情况下绑定到TokenAuthenticationService
)。但是,我想创建一个像这样的工厂绑定,以便ICurrentCompany
绑定到从以下位置创建的对象IAuthentcationService
:
kernel.Bind<ICurrentCompany>().ToMethod(x => new Company { CompanyId = x.Kernel.Get<IAuthenticationService>().User.CompanyId});
这行不通。IAuthenticationService
总是必然的FormsAuthenticationService
。