我想更新我的代碼以使用最新版本的簡單噴油器。使用簡單的噴油器註冊ISolrAbstractResponseParser <>
舊代碼:
container.RegisterOpenGeneric(
typeof(ISolrAbstractResponseParser<>),
typeof(DefaultResponseParser<>));
新的代碼,不工作:
container.Register(typeof(ISolrAbstractResponseParser<>), new[]
{
typeof(ISolrAbstractResponseParser<>).Assembly,
typeof(MultiResponseParser<>).Assembly
});
收到此錯誤:
SimpleInjector.ActivationException was unhandled by user code
HResult=-2146233088
Message=The constructor of type SolrOperationsFactory<LemmaDocument> contains the parameter with name 'responseParser' and type ISolrAbstractResponseParser<LemmaDocument> that is not registered.
Please ensure ISolrAbstractResponseParser<LemmaDocument> is registered, or change the constructor of SolrOperationsFactory<LemmaDocument>.
Source=SimpleInjector
StackTrace:
at SimpleInjector.Container.ThrowParameterTypeMustBeRegistered(InjectionTargetInfo target)
at SimpleInjector.Advanced.DefaultDependencyInjectionBehavior.GetInstanceProducerFor(InjectionConsumerInfo consumer)
at SimpleInjector.Advanced.DefaultDependencyInjectionBehavior.BuildExpression(InjectionConsumerInfo consumer)
at SimpleInjector.ContainerOptions.BuildParameterExpression(InjectionConsumerInfo consumer)
at SimpleInjector.Registration.BuildConstructorParameters(Type serviceType, Type implementationType, ConstructorInfo constructor)
at SimpleInjector.Registration.BuildNewExpression(Type serviceType, Type implementationType)
at SimpleInjector.Registration.BuildTransientExpression[TService,TImplementation]()
at SimpleInjector.Lifestyles.TransientLifestyle.TransientLifestyleRegistration`2.BuildExpression()
at SimpleInjector.Registration.BuildExpression(InstanceProducer producer)
at SimpleInjector.InstanceProducer.BuildExpressionInternal()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at SimpleInjector.InstanceProducer.BuildExpression()
at SimpleInjector.Advanced.DefaultDependencyInjectionBehavior.BuildExpression(InjectionConsumerInfo consumer)
at SimpleInjector.ContainerOptions.BuildParameterExpression(InjectionConsumerInfo consumer)
at SimpleInjector.Registration.BuildConstructorParameters(Type serviceType, Type implementationType, ConstructorInfo constructor)
at SimpleInjector.Registration.BuildNewExpression(Type serviceType, Type implementationType)
at SimpleInjector.Registration.BuildTransientExpression[TService,TImplementation]()
at SimpleInjector.Lifestyles.TransientLifestyle.TransientLifestyleRegistration`2.BuildExpression()
at SimpleInjector.Registration.BuildExpression(InstanceProducer producer)
at SimpleInjector.InstanceProducer.BuildExpressionInternal()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at SimpleInjector.InstanceProducer.BuildExpression()
at SimpleInjector.Advanced.DefaultDependencyInjectionBehavior.BuildExpression(InjectionConsumerInfo consumer)
at SimpleInjector.ContainerOptions.BuildParameterExpression(InjectionConsumerInfo consumer)
at SimpleInjector.Registration.BuildConstructorParameters(Type serviceType, Type implementationType, ConstructorInfo constructor)
at SimpleInjector.Registration.BuildNewExpression(Type serviceType, Type implementationType)
at SimpleInjector.Registration.BuildTransientExpression[TService,TImplementation]()
at SimpleInjector.Lifestyles.TransientLifestyle.TransientLifestyleRegistration`2.BuildExpression()
at SimpleInjector.Registration.BuildExpression(InstanceProducer producer)
at SimpleInjector.InstanceProducer.BuildExpressionInternal()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at SimpleInjector.InstanceProducer.BuildExpression()
at SimpleInjector.Advanced.DefaultDependencyInjectionBehavior.BuildExpression(InjectionConsumerInfo consumer)
at SimpleInjector.ContainerOptions.BuildParameterExpression(InjectionConsumerInfo consumer)
at SimpleInjector.Registration.BuildConstructorParameters(Type serviceType, Type implementationType, ConstructorInfo constructor)
at SimpleInjector.Registration.BuildNewExpression(Type serviceType, Type implementationType)
at SimpleInjector.Registration.BuildTransientExpression[TService,TImplementation]()
at SimpleInjector.Lifestyles.TransientLifestyle.TransientLifestyleRegistration`2.BuildExpression()
at SimpleInjector.Registration.BuildExpression(InstanceProducer producer)
at SimpleInjector.InstanceProducer.BuildExpressionInternal()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at SimpleInjector.InstanceProducer.BuildExpression()
at SimpleInjector.Advanced.DefaultDependencyInjectionBehavior.BuildExpression(InjectionConsumerInfo consumer)
at SimpleInjector.ContainerOptions.BuildParameterExpression(InjectionConsumerInfo consumer)
at SimpleInjector.Registration.BuildConstructorParameters(Type serviceType, Type implementationType, ConstructorInfo constructor)
at SimpleInjector.Registration.BuildNewExpression(Type serviceType, Type implementationType)
at SimpleInjector.Registration.BuildTransientExpression[TService,TImplementation]()
at SimpleInjector.Lifestyles.TransientLifestyle.TransientLifestyleRegistration`2.BuildExpression()
at SimpleInjector.Registration.BuildExpression(InstanceProducer producer)
at SimpleInjector.InstanceProducer.BuildExpressionInternal()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at SimpleInjector.InstanceProducer.BuildExpression()
at SimpleInjector.Advanced.DefaultDependencyInjectionBehavior.BuildExpression(InjectionConsumerInfo consumer)
at SimpleInjector.ContainerOptions.BuildParameterExpression(InjectionConsumerInfo consumer)
at SimpleInjector.Registration.BuildConstructorParameters(Type serviceType, Type implementationType, ConstructorInfo constructor)
at SimpleInjector.Registration.BuildNewExpression(Type serviceType, Type implementationType)
at SimpleInjector.Registration.BuildTransientExpression[TService,TImplementation]()
at SimpleInjector.Lifestyles.TransientLifestyle.TransientLifestyleRegistration`2.BuildExpression()
at SimpleInjector.Registration.BuildExpression(InstanceProducer producer)
at SimpleInjector.InstanceProducer.BuildExpressionInternal()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at SimpleInjector.InstanceProducer.BuildInstanceCreator()
at SimpleInjector.InstanceProducer.BuildAndReplaceInstanceCreatorAndCreateFirstInstance()
at SimpleInjector.InstanceProducer.GetInstance()
at SimpleInjector.Container.GetInstanceForRootType[TService]()
at SimpleInjector.Container.GetInstance[TService]()
at Goo.FileMonitor.FileMonitor.Start() in C:\projects\Gyldendal.Goo\Source\Goo.FileMonitor\Goo.FileMonitor\FileMonitor.cs:line 23
at Goo.FileMonitor.Program.<>c.<Main>b__0_3(FileMonitor tc) in C:\projects\Gyldendal.Goo\Source\Goo.FileMonitor\Goo.FileMonitor\Program.cs:line 14
at Topshelf.ServiceConfiguratorExtensions.<>c__DisplayClass2_0`1.<WhenStarted>b__0(T service, HostControl control)
at Topshelf.Builders.DelegateServiceBuilder`1.DelegateServiceHandle.Start(HostControl hostControl)
at Topshelf.Hosts.ConsoleRunHost.Run()
InnerException:
的接口以SolrNet聲明,但在我的代碼中使用。
container.RegisterOpenGeneric已從Simple Injector中刪除。 Link to documentation
簡單的噴油器在這個類中沒有按規定:
/// <summary>
/// An adapter for SolrNet.Impl.SolrMoreLikeThisHandlerQueryResultsParser to work around a limitation in SimpleInjector where
/// arrays of open generic types cannot be injected.
/// </summary>
/// <typeparam name="T"></typeparam>
public class SolrMoreLikeThisHandlerQueryResultsParserAdapter<T> : SolrMoreLikeThisHandlerQueryResultsParser<T>
{
public SolrMoreLikeThisHandlerQueryResultsParserAdapter(IEnumerable<ISolrAbstractResponseParser<T>> parsers) : base(parsers.ToArray())
{
}
}
是否還有用簡單的噴油器和開放式泛型類型的數組注入一個問題嗎?
***** 我放棄更新我的項目使用Simple Injector => 3.0 ***** 我應該刪除這個問題嗎?
你能後的在使用'container.RegisterOpenGeneric'代碼時從C#中獲得的精確編譯錯誤? – Steven
我沒有收到使用container.RegisterOpenGeneric的錯誤。我的舊代碼正在運行,但container.RegisterOpenGeneric已在新版本的Simple Injector中被刪除 –
您現在使用哪個版本? – Steven