Ninject - 解析每个方法调用的实例
Ninject - Resolve instance per method call
我正在寻找一个解决方案来为每个方法调用解析一个实例。
类似的东西:
public class ServiceAPI
{
public void ServiceAction()
{
//Call certain repository action
// Ex:
Kernel.Get<RepositoryA>().Insert();
}
}
public class RepositoryA
{
public void Insert(object a)
{
//Get logger per service call ?
var logger = Kernel.Get<RepositoryA>().Insert();
}
}
我想在每次服务调用时创建一次记录器实例,并将在整个存储库中使用。
我尝试使用 Ninject.Extensions.NamedScope 扩展,但它还没有奏效。
你有什么办法可以处理这种情况吗?
无法通过使用范围机制实现此目的。 (InCallScope()
、InNamedScope(...)
、...)。
范围仅在 ninject 调用类型的构造函数时才相关。
Ninject 永远不能替换已经传递给对象的实例。
如果你想这样做,你必须自己编程。
这里有两种设计方案供您实现所需:
- 每个方法调用实例化一个对象树。如果有一些服务基础设施,如 WCF 或 Web-API,则可能有挂钩可以用来这样做。
- 替换代理每次调用方法时应实例化的对象。然后代理可以使用 Ninject 为每个方法调用创建目标并在其上执行方法。
对于代理,您可以使用 Castle DynamicProxy or LinFu. There's also Ninject.Extensions.Interception 等工具,这也可能会有帮助。
我正在寻找一个解决方案来为每个方法调用解析一个实例。 类似的东西:
public class ServiceAPI
{
public void ServiceAction()
{
//Call certain repository action
// Ex:
Kernel.Get<RepositoryA>().Insert();
}
}
public class RepositoryA
{
public void Insert(object a)
{
//Get logger per service call ?
var logger = Kernel.Get<RepositoryA>().Insert();
}
}
我想在每次服务调用时创建一次记录器实例,并将在整个存储库中使用。 我尝试使用 Ninject.Extensions.NamedScope 扩展,但它还没有奏效。 你有什么办法可以处理这种情况吗?
无法通过使用范围机制实现此目的。 (InCallScope()
、InNamedScope(...)
、...)。
范围仅在 ninject 调用类型的构造函数时才相关。
Ninject 永远不能替换已经传递给对象的实例。
如果你想这样做,你必须自己编程。
这里有两种设计方案供您实现所需:
- 每个方法调用实例化一个对象树。如果有一些服务基础设施,如 WCF 或 Web-API,则可能有挂钩可以用来这样做。
- 替换代理每次调用方法时应实例化的对象。然后代理可以使用 Ninject 为每个方法调用创建目标并在其上执行方法。
对于代理,您可以使用 Castle DynamicProxy or LinFu. There's also Ninject.Extensions.Interception 等工具,这也可能会有帮助。