我正在使用 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();
}
}