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=>…)
中有什么内容?