1

我正在使用 ServiceStack 4.0.34。

Container.RegisterAutoWire() 方法有效,但是当我创建注册类的实例时,除非我HostContext.Container.AutoWire(this)在类构造函数中手动调用,否则不会发生自动装配。

我已经阅读了 GitHub 上的文档和 stackoverflow 上的几个条目。我尝试了 Register 和 RegisterAutoWire 方法的不同重载。我也尝试过以不同的方式设置 ReuseScope。没有成功。没有自动注入 DbFactory 属性。

谁能告诉我我是否错过了一步或做错了什么?下面的代码片段:

public class RouteAppHost : AppHostBase
{
  public override void Configure(Container container)
  {
    container.Register<IDbConnectionFactory>(new OrmLiteConnectionFactory(
      ConfigurationManager.ConnectionStrings["DB"].ConnectionString,
      SqlServerOrmLiteDialectProvider.Instance));

    container.RegisterAutoWired<MyRepository>().ReusedWithin(ReuseScope.None);
    ...
  }
}

public class MyRepository : RepositoryBase
{
  public MyRepository()
  {
    //Works if this line is uncommented.
    //HostContext.Container.AutoWire(this);
  }

  public List<MyUnit> All()
  {
    // Db is null as is DbFactory. This throws an exception.
    return Db.Select<MyUnit>();
  }
}

// For reference, from Metadata
public abstract class RepositoryBase : IDisposable, IRepository
{
  protected RepositoryBase();

  public virtual IDbConnection Db { get; }
  public virtual IDbConnectionFactory DbFactory { get; set; }

  public virtual void Dispose();
}

附录(2015 年 1 月 20 日):这是服务的样子:

public class BlackList
{
  public short Key { get; set; }

  [StringLength(15)]
  public string Name { get; set; }

  public bool Active { get; set; }
}

[Route("/queryBlackList/group/{Key}", "GET")]
[Route("/queryBlackList", "GET")]
public class QueryBlackList : IReturn<List<BlackList>>
{
  public int Key { get; set; }
}

public class BlackListContext
{
  public static List<BlackList> AllRecords()
  {
    using (var repo = new BlackListRepository())
    {
      return repo.All();
    }
  }
}

public class BlackListService : Service 
{    
  public object Get(QueryBlackList request)
  {
    return BlackListContext.AllRecords();
  }
}
4

0 回答 0