2
Simple Injectorで引数を持つジェネリック型を登録する方法
(最新SimpleInjectorバージョンv3)。Simple Injectorでコンストラクタ引数を持つジェネリック型を登録する
私のインターフェイスはです。
public interface IDbHelper<T> where T : class
{
void SetInformation(string title, string description);
}
マイクラスの実装。
public class JsonDbWrapper<T> : IDbHelper<T> where T : class
{
private readonly JsonDb<T> _jsonFile;
public JsonDbWrapper(string path, string filename, Encoding encoding)
{
_jsonFile = JsonDb<T>.GetInstance(path, filename, encoding);
}
public void SetInformation(string title, string description) { ... }
}
私は勿論、それは例外を投げ、以下試してみました:
container.Register(typeof(IDbHelper<>), typeof(JsonDbWrapper<>));
例外があります。
Error: System.ArgumentException: The constructor of type
JsonDbWrapper<T>
contains parameter 'path' of type String which can not be used for constructor injection.
パス、ファイル名、およびエンコードを設定する方法を作成できます。しかし、私はそれらをコンストラクタに入れたい。 Simple Injectorを使う正しい方法を学びたい。
に登録することで、パス、ファイル名およびエンコーディング定数である、またはそれらを総称ごとに異なりますタイプ?すべての 'T 'は同じ値を持っていますか? – Steven
@スティーブン不明な質問を申し訳ありません。例:pathは "D:\ MyJsonFolder \"、ファイル名は "persons.json"です.TはPersonクラスです。別の例:TはAccountクラスなどのため、パスは "D:\ MyJsonFolder \"、ファイル名は "accounts.json"です。 –
Turbotの答えは正しいです – Steven