我正在使用Service Stack,但我不能(或者我不知道如何使用构造函数创建一个Service类)。
这是我做的:
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'或其中一个自动连线 依赖
答案 0 :(得分:3)
使用Constructor和Property Injection自动装配和创建ServiceStack服务。任何构造函数参数都是必需的,必须在AppHost.Configure()
的ServiceStack的IOC中注册,例如:
public override void Configure(Container container)
{
container.Register<ILayout>(c => ...);
container.Register<Init>(c => ...);
}
服务上的任何公共属性都是可选的,如果它们存在或者是null
,将从IOC填充。
在服务之外的base.ResolveService<T>
类或Service
单例内部,应使用HostContext.ResolveService<T>()
API解析服务。这将解析ServiceStack的IOC中的Service类,并填充IRequest
上下文(如果有)。
答案 1 :(得分:2)
@ Mati,@ TheMiddleMan @mythz的答案希望您对IOC(控制反转)有关依赖项注入和容器有一些常识。在您的问题中,您询问有关构造函数注入的问题。如果您已经预配置(注册)了参数对象,则ServiceStack的IOC可以使用自动装配来处理它,例如:
container.Register(c => new Layout()); 有关更多示例,请参见https://docs.servicestack.net/ioc。
有关IOC和DI(依赖注入)的更多信息,请参见https://dzone.com/articles/ioc-vs-di。