无法在服务中注入依赖项
本文关键字:注入 依赖 服务 | 更新日期: 2023-09-27 18:34:43
我有一个看起来像这样的服务:
public class StuffService : ServiceStack.Service
{
private IStuffHandler _handler;
public StuffService(IStuffHandler handler)
{
_handler = handler;
}
public void Post(RequestMessage message)
{
_handler.HandleIt();
}
}
在 StuffService 中,_handler 应实例化为以下类:
public class StuffHandler : IStuffHandler
{
public void HandleIt()
{
//do stuff
}
}
并在单独的文件中:
public class ServiceAppHost : AppHostHttpListenerBase
{
public ServiceAppHost() :
base("CoolConnectionString", typeof(ServiceAppHost).Assembly)
{
}
public override void Configure(Container container)
{
this.Plugins.Add(new SwaggerFeature());
container.RegisterAs<IStuffHandler, StuffHandler>();
}
}
static void Main(string[] args)
{
ServiceAppHost appHost = new ServiceAppHost();
appHost.Init();
appHost.Start("http://localhost:7894/");
Console.Read();
}
现在,我不知道如何将IStuffHandler设置为StuffHandler的实例。我已经在官方的ServiceStack文档页面上关注了这个页面。我已经在该链接页面上尝试了几种不同的方法,但我无法让ServiceStack将_handler实例化为StuffHandler实例。我需要做什么?
依赖注入需要
可以注入依赖的地方 - 在您的情况下,没有办法设置私有字段。
你要么需要一个构造函数,它接受 DI 容器支持的IStuffHandler
或一些其他公共方法/字段/属性。
在 startmethod中,您必须调用类似 container.resolve<MyService>()
的东西才能从容器中获取实例。
你的依赖项注册顺序是错误的,它应该是:
container.RegisterAs<StuffHandler, IStuffHandler>();
另一种注册是使用容器注册此类类型的实例。注册:
container.Register<IStuffHandler>(c => new StuffHandler());
在服务中,依赖项由公共属性注入:
public class StuffService : ServiceStack.Service
{
public IStuffHandler Handler { get; set; }
public void Post(RequestMessage message)
{
Handler.HandleIt();
}
}
或通过构造函数:
public class StuffService : ServiceStack.Service
{
private IStuffHandler _handler;
public StuffService(IStuffHandler handler)
{
_handler = handler;
}
public void Post(RequestMessage message)
{
_handler.HandleIt();
}
}
这些示例中的任何一个都会将依赖项注入到服务中。