Я никогда раньше не использовал Windsor, но использовал другие DI-фреймворки, и у меня сейчас довольно странная проблема.
У меня есть фабричный класс, который принимает строку в своем конструкторе, однако всякий раз, когда я пытаюсь разрешить этот объект, я получаю исключение:
Handler for System.String was not found.
<Message>Handler for System.String was not found.</Message>
<StackTrace>at Castle.MicroKernel.Resolvers.DefaultDependencyResolver
.TryGetHandlerFromKernel(DependencyModel dependency, CreationContext context)
in d:\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:line 403
at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveCore(CreationContext context, ComponentModel model, DependencyModel dependency) in d:\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:line 270</StackTrace>
<Type>Castle.MicroKernel.Handlers.HandlerException</Type>
</InnerException>
<Message>Missing dependency.
Component SomeExampleFactory has a dependency on System.String, which could not be
resolved.
Make sure the dependency is correctly registered in the container as a service, or
provided as inline argument.</Message>
Класс выглядит примерно так:
public interface IDummyFactory
{
void DoSomething();
}
public class DummyFactory : IDummyFactory
{
private string someString;
public DummyFactory(string someConstructorArg)
{
someString = someConstructorArg;
}
}
С настройкой DI ниже:
var someString = "some constructor arg";
_container.Register(Component.For<IDummyFactory>()
.ImplementedBy<DummyFactory>()
.DependsOn(someString));
Я предполагаю, что он пытается выполнить какое-то приведение или форматирование, которое вызывает его бомбардировку, но поскольку сам тип является строкой, а переменная передается в строке ... это может быть даже на тот случай, если он пытается отобразить тип этой переменной, а не ее содержимое, но я недостаточно знаю структуру DI и документацию по этой области