【问题标题】:Ninject - Resolve instance per method callNinject - 每个方法调用解析实例
【发布时间】:2015-08-10 06:30:03
【问题描述】:

我正在寻找解决每个方法调用的实例的解决方案。 类似的东西:

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 扩展,但它还没有工作。 你有什么办法来处理这种情况吗?

【问题讨论】:

    标签: ninject ninject-extensions


    【解决方案1】:

    不可能通过使用范围机制来实现这一点。 (InCallScope()InNamedScope(...),...)。 范围仅在 ninject 调用类型的构造函数时才相关。 Ninject 不能 - 永远 - 替换已经传递给对象的实例。 如果你想这样做,你必须自己编程。

    您可以通过以下两种设计方案来实现您想要的效果:

    • 为每个方法调用实例化一个对象树。如果有诸如 WCF 或 Web-API 之类的服务基础架构,则可能有可用于执行此操作的钩子。
    • 替换应该由代理每次方法调用实例化的对象。然后代理可以使用 Ninject 为每个方法调用创建目标并在其上执行方法。

    对于代理,您可以使用Castle DynamicProxyLinFu 等工具。还有Ninject.Extensions.Interception 也可能有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多