Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# 带有构造函数的ServiceStack服务类_C#_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Ioc Container_Funq - Fatal编程技术网 servicestack,ioc-container,funq,C#,servicestack,Ioc Container,Funq" /> servicestack,ioc-container,funq,C#,servicestack,Ioc Container,Funq" />

C# 带有构造函数的ServiceStack服务类

C# 带有构造函数的ServiceStack服务类,c#,servicestack,ioc-container,funq,C#,servicestack,Ioc Container,Funq,我正在使用服务堆栈,但我不能(或者我不知道如何使用构造函数创建服务类) 以下是我所做的: public class AppHost : AppSelfHostBase { public AppHost() : base("ClientService", typeof(ClientService).Assembly) { } public override void Configure(Container container) {

我正在使用服务堆栈,但我不能(或者我不知道如何使用构造函数创建服务类)

以下是我所做的:

public class AppHost : AppSelfHostBase
{
    public AppHost()
        : base("ClientService", typeof(ClientService).Assembly)
    {
    }

    public override void Configure(Container container)
    {
    }
}


public class Context : ApplicationContext
{
    //This class is invoked from program.cs (winform application)
    //Here i have the logic of what form should i start.
    var listeningOn = string.Format("http://*:{0}/", port);
    var appHost = new AppHost();
    appHost.Init();
    appHost.Start(listeningOn);
    ClientService cl = new ClientService((ILayout)f, i);
}

public class ClientService : Service
{
    private readonly ILayout _activeForm;
    private static Init _initConf;


    public ClientService(ILayout f, Init i)
    {
        _activeForm = f;
        _activeForm.GetClientData(i);
        _initConf = i;
    }

    public HttpResult Post(Person request)
    {
       //Here i use _activeForm and _initConf 
    }
}
正如我所说,在ClientService类中,我想创建一个构造函数,但是当我向post消息发出请求时,它会显示以下错误:

尝试解析服务时出错 “DexBrokerClient.Services.ClientService”或其自动连接的 依赖关系


ServiceStack服务是使用构造函数和属性注入自动连接和创建的。任何构造函数参数都是必需的,必须在
AppHost.Configure()
中的ServiceStack的IOC中注册,例如:

public override void Configure(Container container)
{
    container.Register<ILayout>(c => ...);
    container.Register<Init>(c => ...);
}
public override void Configure(容器)
{
容器。寄存器(c=>…);
容器。寄存器(c=>…);
}
而服务上的任何公共属性都是可选的,如果它们存在或为
null
,则将由IOC填充

解析服务
Service
类内部或
HostContext.ResolveService()
服务外部的单例时,应使用
base.ResolveService
API解析服务。这将从ServiceStack的IOC解析服务类,并用
IRequest
上下文(如果有)填充。

@Mati,@mythz的答案希望您对依赖项注入和IOC(控制反转)容器有一些一般性的了解。在您的问题中,您询问了构造函数注入。如果您已预先配置(注册)参数对象,ServiceStack的IOC可以使用自动连接来处理它,例如:

Register(c=>newlayout()); 有关更多示例,请参阅


有关IOC和DI(依赖注入)的更多信息,请参阅。

谢谢,我仍然不知道如何解决这个问题。。在类“Context”中,我正在创建表单的实例和Init(类),同时,我创建ClientService的实例,我将参数发送给构造函数。@MatiSilver我不知道您正在尝试做什么,或者为什么要使用服务类来实现这一点?当AppHost初始化时,服务是预自动连接的,并且需要从IOC解析,如果您使用的是非默认构造函数,则每个参数都需要在IOC中注册。您不应该直接创建服务类,这是ServiceStack在执行服务时自己所做的。您可以从IOC解析服务类以创建其实例,但它需要在IOC中注册其强制DEP,如果您不想这样做,请不要使用服务类。好的,让我们更轻松一些。。在我的上下文类中,我将创建一个我需要在服务类中使用的对象。(我改变了我的架构,所以现在我没有带参数的构造函数),但我仍然需要使用我在其他类中初始化的对象。。如何将我在一个类中创建的对象使用到服务类中?谢谢。更完整的答案会更好。你实际上没有解释该怎么做。来自一个直到今天才使用过服务堆栈的人,这个答案并没有给我任何东西。
(c=>…)
中有什么内容?