我有一个像这样的类层次结构(简化):
class Connection
{
}
interface IService<T>
{
}
class ServiceImplementation : IService<int>
{
public ServiceImplementation(Connection)
{
}
}
interface IConnectionConfiguration
{
public void Configure(Connection c)
}
class ConnectionConfiguration : IConnectionConfiguration
{
public void Configure(Connection c)
}
我有多个IConnectionConfiguration和IService的实现。我想创建一个提供者/绑定:
目前我有这样的提供程序实现:
public Connection CreateInstance(IContext context)
{
var configurations = context.Kernel.GetAll<IConnectionConfiguration>()
var connection = new Connection();
foreach(var config in configurations)
{
config.Configure(connection);
}
return connection;
}
但是当我尝试为IConnectionConfiguration创建上下文绑定时,它没有父请求或父上下文......
Bind<IConnectionConfiguration>().To<ConcreteConfiguration>().When(ctx => {
// loop through parent contexts and see if the Service == typeof(IService<int>);
// EXCEPT: The ParentRequest and ParentContext properties are null.
});
我在这里做错了什么?我可以用ninject做到这一点吗?
答案 0 :(得分:2)
通过调用kernel.GetAll
,您正在创建新请求。它没有关于服务上下文的信息。有一个扩展,允许您创建保留原始上下文的新请求(Ninject.Extensions.ContextPreservation)
另见https://github.com/ninject/ninject.extensions.contextpreservation/wiki
context.GetContextPreservingResolutionRoot().GetAll<IConnectionConfiguration>();