1

SS(素晴らしいフレームワーク!!)を使用するプロジェクトがあります。これはRest APIです。インターフェイスを提供する同じソリューションで、他のプロジェクトを参照しています(VS2012でこれを行っています)。このインターフェイスを実装する同じソリューションに 3 番目のプロジェクトもあります。これらのプロジェクトを呼び出しましょう:

WebAPI Interfaces Engine

WebAPI はインターフェイスとエンジンを参照します。エンジン リファレンス インターフェイス

これまでのところ、すべて順調です。

(WebAPI の) appHost で IOC を使用して、エンジンのインターフェイスを登録しますが、これも同様に機能します。

私の問題は、エンジンが Ormlite データベースにアクセスする必要があることです。ServiceStatck.OrmLight.Mysql の参照をエンジンに追加しましたが、エンジン コンストラクターで参照すると参照が null になります。

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

Webapi からデータベースにアクセスできます。エンジンにデータベースを通知するにはどうすればよいですか? 私はレイヤーの中で迷子になっているようです。

これが明確であることを願っています(検討中)。

4

1 に答える 1

0

AppHost (WebAPI プロジェクト内) がエンジン / IEngine インスタンスを登録および解決している場合、IDbConnectionFactory をエンジン インスタンスに注入する必要があります。

最善の方法は、コンストラクター インジェクションを使用することです。

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
        }
    }
}

依存関係が登録されている場合、エンジンはメインの AppHost から dbFactory を取得します。

プロジェクト/ソリューションのセットアップに関しては、推奨される ServiceStack物理プロジェクト構造 ( SO も参照) を確認することをお勧めします。

于 2014-02-27T23:29:46.427 に答える