1

我有一个使用 SS(很棒的框架!!)的项目。它是一个 Rest API。我在提供接口的同一解决方案中引用了另一个项目(我在 VS2012 中这样做)。在实现此接口的同一解决方案中,我还有第三个项目。让我们调用这些项目:

WebAPI Interfaces Engine

WebAPI 引用接口和引擎。引擎参考接口

到目前为止一切都很好。

我在appHost(WebAPI)中使用IOC来注册引擎的接口,这也可以。

我的问题是我的引擎需要访问 Ormlite 数据库。我已向 Engine 添加了 ServiceStatck.OrmLight.Mysql 的引用,但在 Engine 构造函数中引用时该引用为空。

public Engine()
    {
        using (var db = DbConnectionFactory.OpenDbConnection())
        {
            //do db operations
        }
    }

我可以从 Webapi 访问查找数据库。如何通知数据库引擎?我似乎迷失在层层之中。

我希望这很清楚(考虑)。

4

1 回答 1

0

如果您的 AppHost(在 WebAPI 项目中)正在注册并解析 Engine / IEngine 实例,那么您需要将 IDbConnectionFactory 注入您的 Engine 实例。

最好的方法是通过构造函数注入。

修改您的 Engine 类以依赖 IDbConnectionFactory:

public class Engine : IEngine
{
    IDbConnectionFactory dbFactory = null;

    public Engine(IDbConnectionFactory dbFactory)  // IoC container injects dbFactory
    {
        this.dbFactory = dbFactory;
    }

    public void DoSomething()
    {
        using (var db = dbFactory.OpenDbConnection())
        {
            //do db operations
        }
    }
}

如果您的依赖项已注册,Engine 将拥有来自您的主 AppHost 的 dbFactory。

至于项目/解决方案设置,我建议查看推荐的 ServiceStack物理项目结构也在 SO 上)。

于 2014-02-27T23:29:46.427 回答