Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简单注入器-注入IHttpHandler_C#_Wcf_Dependency Injection_Simple Injector_Ihttphandler - Fatal编程技术网

C# 简单注入器-注入IHttpHandler

C# 简单注入器-注入IHttpHandler,c#,wcf,dependency-injection,simple-injector,ihttphandler,C#,Wcf,Dependency Injection,Simple Injector,Ihttphandler,我正在尝试将SimpleInjector嵌入到我的WCF项目中(我已经按照说明进行了操作)。到目前为止,一切都进展顺利,除了伊赫特芬德勒事件: 当前实现使用IHttpHandler,而IHttpHandler又使用MyServiceWrapper静态实例: public class IsAliveHandler : IHttpHandler { private const string SERVER_ERROR = "Bad"; private const string SERV

我正在尝试将SimpleInjector嵌入到我的WCF项目中(我已经按照说明进行了操作)。到目前为止,一切都进展顺利,除了伊赫特芬德勒事件: 当前实现使用IHttpHandler,而IHttpHandler又使用MyServiceWrapper静态实例:

public class IsAliveHandler : IHttpHandler
{
    private const string SERVER_ERROR = "Bad";
    private const string SERVER_OK = "OK";

    public void ProcessRequest(HttpContext context)
    {
        var quoteSucceeded = false;
        var isLastLoginSucceeded = MyServiceWrapperContainer.Manager.IsLastLoginSucceeded;
//More logic here ...
    }
}
现在,由于我将我的应用程序移动到使用SimpleInjector DI机制,我不能使用这样的静态访问,因为我希望使用与DI容器相同的实例。 此处的构造函数注入出现异常:

[MissingMethodException: Constructor on type '***.Applications.MyServiceWrapperService.KeepAliveHandler.IsAliveHandler' not found.]
在这种情况下有没有办法使用容器?有其他选择吗?


一般来说,我可以理解这样的问题是使用状态的味道,但目前这是要求。

您的
IsAliveHandler
不能有任何构造函数参数(这是应用程序框架的约束)

相反,您应该编写< IsAliveHandler > <代码> >,并将其视为您的.

的一部分。 这意味着您可以从
IsAliveHandler
中提取所有感兴趣的逻辑(例如,提取到
IsAliveService
),并将
IsAliveHandler
更改为以下内容:

public class IsAliveHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Bootstrapper.Container.GetInstance<IsAliveService>().Process(context);
    }
}

您的
IsAliveHandler
不能有任何构造函数参数(这是应用程序框架的约束)

相反,您应该编写< IsAliveHandler > <代码> >,并将其视为您的.

的一部分。 这意味着您可以从
IsAliveHandler
中提取所有感兴趣的逻辑(例如,提取到
IsAliveService
),并将
IsAliveHandler
更改为以下内容:

public class IsAliveHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Bootstrapper.Container.GetInstance<IsAliveService>().Process(context);
    }
}

谢谢你的真知灼见!关于您在处理程序中建议的服务定位器:目前,我使用组合根目录中的容器作为:
public class Global:System.Web.HttpApplication{private readonly container\u container=new container()
。正如您在代码中所写:
引导程序.Container.GetInstance
-我是否应该将容器移动到静态引导程序类?您可以将容器放置在您喜欢的任何位置,只要应用程序的启动路径(can)即可获取它。在组合根中使用容器是服务定位器反模式。您的处理程序可以被视为组合根的一部分。这就是为什么您应该提取所有(业务)处理程序中的逻辑。感谢您的深入见解!关于您在处理程序中建议的服务定位器:目前我在组合根目录中使用的容器为:
public class Global:System.Web.HttpApplication{private readonly container\u container=new container()
。正如您在代码中所写:
引导程序.Container.GetInstance
-我是否应该将容器移动到静态引导程序类?您可以将容器放置在您喜欢的任何位置,只要应用程序的启动路径(can)即可获取它。在组合根中使用容器是服务定位器反模式。您的处理程序可以被视为组合根的一部分。这就是为什么您应该从处理程序中提取所有(业务)逻辑。