Ninject - 解析每个方法调用的实例

时间:2015-08-10 06:30:03

标签: ninject ninject-extensions

我找到了解决每个方法调用实例的解决方案。 这样的事情:

<?php
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$age = $_POST['age'];
$email = $_POST['email'];
$emailb = $_POST['emailb'];
if (){ //I had a lot of tests here, removed them for the sake of a nice page
    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $age = $_POST['age'];
    $email = $_POST['email'];
    $emailb = $_POST['emailb'];
$UserInfo = <<<EOT
[NAME] = $fname, $lname
[AGE] = $age
[EMAIL] = $email
EOT;
file_put_contents("UserInfo.txt", $UserInfo, FILE_APPEND);
} else {
    echo "Something went wrong";
} ?>

我希望每个服务调用创建一次logger实例,它将在整个存储库中使用。 我尝试使用Ninject.Extensions.NamedScope扩展但它还没有工作。 你有办法处理这种情况吗?

1 个答案:

答案 0 :(得分:0)

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

以下是两种设计方案,您可以如何实现目标:

  • 每个方法调用实例化一个对象树。如果有一些服务基础设施,如WCF或Web-API,可能会有钩子可以用来这样做。
  • 替换应由代理进行方法调用实例化的对象。然后代理可以使用Ninject为每个方法调用创建目标并在其上执行方法。

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