Castle Windsor 3以构造函数参数作为字符串
问题描述:
我以前从未使用过Windsor,但使用过其他DI框架,此刻我遇到了一个相当奇怪的问题。Castle Windsor 3以构造函数参数作为字符串
我有一个工厂类,它需要一个字符串在其构造,但是每当我试图解决该对象我得到一个异常说:
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框架和文档
答
尝试调用的DependsOn
超载这需要键/值对的IDictionary
指定依赖:
_container.Register(
Component.For<IDummyFactory>()
.ImplementedBy<DummyFactory>()
.DependsOn(new Hashtable
{
{ "someConstructorArg", "some constructor arg" }
}));
答
我也在寻找这个答案,看起来他们现在有一些简单的东西,他们称之为“内联依赖”,这是通过(其他方式)D依赖.OnValue()方法。
下面是从文档的一般示例:
var twitterApiKey = @"the key goes here";
container.Register(
Component.For<ITwitterCaller>().ImplementedBy<MyTwitterCaller>()
.DependsOn(Dependency.OnValue("APIKey", twitterApiKey))
);
它将使用值twitterApiKey为的名称为“APIKey”(不区分大小写)的参数中。
http://docs.castleproject.org/Windsor.Inline-Dependencies.ashx
它看起来像这样可能已经在3.1版本以上的,但我不能完全破译它们的更新标记约定。
哪个版本的温莎城堡? –