无法在服务中注入依赖项

本文关键字:注入 依赖 服务 | 更新日期: 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();
    }
}

这些示例中的任何一个都会将依赖项注入到服务中。