gpt4 book ai didi

binding - Ninject 绑定(bind)约束,向上搜索以查找类型

转载 作者:行者123 更新时间:2023-12-02 11:17:00 25 4
gpt4 key购买 nike

我有一个像这样的类层次结构(简化):

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 的多个实现。我想创建一个提供者/绑定(bind):

  1. 构造一个新的 Connection 实例。
  2. GetAll 并将其应用于连接。
  3. 绑定(bind)指定要使用的 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)时,它没有父请求或父上下文...

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 做到这一点吗?

最佳答案

通过调用kernel.GetAll,您将创建一个新请求。它没有有关服务上下文的信息。有一个扩展允许您创建保留原始上下文的新请求(Ninject.Extensions.ContextPreservation)

另请参阅https://github.com/ninject/ninject.extensions.contextpreservation/wiki

context.GetContextPreservingResolutionRoot().GetAll<IConnectionConfiguration>();

关于binding - Ninject 绑定(bind)约束,向上搜索以查找类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7551638/

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