我对 DI 和 IoC 还很陌生,所以你可以想象我现在开始碰壁,让这个应用程序现在使用 Unity 容器运行。问题是当我想StandardAnalyzer
在 Lucene 上使用 DI 时,出现以下错误:
StandardAnalyzer 类型有多个长度为 2 的构造函数。无法消除歧义。
所以我的理解是,Unity Container 正在寻找具有最多参数的构造函数,但因为有多个它无法分辨出哪一个。正如您将在下面的代码中看到的那样,构造函数只是想使用带有一个参数的版本类型(来自 Lucene 命名空间)。我试过使用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)));