1

Funq.Container で登録済みの型を初期化するときに、接続文字列プロパティをどのように活用できますか? ServiceStack は、IoC コンテナー (Funq.Container) に型を登録するときに接続文字列を含める方法を示していますが、実際にその接続文字列を使用している例は見つかりません。これをクライアント エンドで使用して、内部 JsonClient のベース URI を指定したいと思います。

例はこれを示します:

container.Register(new MyType(c.Resolve<IDependency>(), connectionString));

しかし、どの例も、connectionString変数で何かが起こったことを示していません。

4

2 に答える 2

2

その例が言っていることは、コンテナがMyTypeリクエストごとに のインスタンスを作成するということです。のインスタンスを作成するとMyType、依存関係IDependencyがパラメータとして のコンストラクタに渡されMyTypeconnectionString.

ただし、コード例には入力パラメーターcが必要です。

container.Register(c => new MyType(c.Resolve<IDependency>(), connectionString));

の使い方はconnectionStringあなた次第です。のオブジェクトで好きなように使用できますMyType。アクセスできるように、パブリック プロパティとして公開することもできます。またはあなたと一緒にそれを使用してくださいIDependency。拡張された例として:

public class MyType
{
    private IDependency _someDependency;
    public string ConnectionString { get; private set }

    public MyType(IDependency dependency, string connectionString)
    {
        _someDependency = dependency.SetConnectionString(connectionString); // Assumes this method exists.
        ConnectionString = connectionString;
    }
}

あなたのサービスでは、が自動配線されているときMyTypeに、オブジェクトにアクセスできるようになりました。

public class MyService : Service
{
    public MyType MyType { get; set; }

    public void Get(SomeRequest request)
    {
         string connectionString = MyType.ConnectionString;
    }
}

他の場所で解決したい場合MyTypeは、使用できます

MyType myType = HostContext.Container.Resolve<MyType>();
string connectionString = myType.ConnectionString;

connectionStringこれで、オブジェクト コンストラクターに が渡されるだけで、必要に応じて自由に使用できることが明らかになることを願っています。

于 2014-02-16T18:22:17.393 に答える
1

ドキュメントをもう一度確認してください。参照したセクションのすぐ上の段落には、インスタンス化されるオブジェクトが接続文字列を必要とするデリゲート メソッドが示されています。作成者は、コンストラクターを介してオブジェクトに接続文字列 (またはその他の必要なパラメーター) を提供できることを示唆しようとしていると思います...

container.Register(c => new MyType(c.Resolve<IDependency>(), connectionString));
container.Register<IMyType>(c => new MyType(c.Resolve<IDependency>(), connectionString));
container.Register(c => CreateAndInitialzeMyType(c.Resolve<IDependency1>(), c.Resolve<IDependency2>));

この例では、表示されているメソッドはクラスのコンストラクター メソッドです... オプションのパラメーターが必要な場合があります。

問題のドキュメント: The IoC container

于 2014-02-16T18:22:45.723 に答える