私はDIとIoCにまったく慣れていないので、ご想像のとおり、Unityコンテナーでこのアプリケーションを実行するためにいくつかの壁にぶつかり始めています。問題は、LuceneでDIを使用したいときにStandardAnalyzer
、次のエラーが発生することです。
StandardAnalyzerタイプには、長さ2のコンストラクターが複数あります。曖昧さを解消できません。
つまり、私が理解しているのは、Unity Containerが最も多くのパラメーターを持つコンストラクターを探しているということですが、複数あるため、どれがどれかを判断できません。ただし、以下のコードでわかるように、コンストラクターは、(Lucene名前空間からの)バージョンのタイプを持つ1つのパラメーターを持つコンストラクターを使用したいだけです。使ってみましInjectionConstructor
たが動かないので、出来ないのではないかと思い始めています。何か助けてください?
private const string Analyzer = "analyzer";
private const string Logging = "logging";
private const string FsDirectory = "fsDirectory";
private const string IndexWriter = "indexWriter";
var analyzer = new StandardAnalyzer(Version.LUCENE_29);
var fsDirectory = FSDirectory.Open(new DirectoryInfo(
new AppConfig().DatabaseName()));
var indexWriter = new IndexWriter(fsDirectory, analyzer,
new IndexWriter.MaxFieldLength(int.MaxValue));
this.RegisterType<StandardAnalyzer>(new InjectionConstructor(
new ResolvedParameter<Version>(Analyzer)));
//RegisterInstance(typeof(StandardAnalyzer), Analyzer, analyzer,
// new ContainerControlledLifetimeManager());
RegisterInstance(typeof(FSDirectory), FsDirectory, fsDirectory,
new ContainerControlledLifetimeManager());
RegisterInstance(typeof(IndexWriter), IndexWriter, indexWriter,
new ContainerControlledLifetimeManager());
this.RegisterType<IDocumentIndexerWithLucene, DocumentIndexerWithLucene>(
new ContainerControlledLifetimeManager(),
new InjectionConstructor(
new ResolvedParameter(typeof(StandardAnalyzer), Analyzer),
new ResolvedParameter(typeof(Logging), Logging),
new ResolvedParameter(typeof(FSDirectory), FsDirectory),
new ResolvedParameter(typeof(IndexWriter), IndexWriter)));