未能通过Castle Windsor传递通用参数
尝试使用Castle Windsor创建参数化实例时 ,传递generics参数似乎存在问题
未通过通用论证的演示
private static void Main(string[] args) { PassGenericParamAtResolutionTime(); Console.ReadLine(); } private static void PassGenericParamAtResolutionTime() { Console.WriteLine("Passing generic argument fails"); var container = new WindsorContainer(); container.Register(Component.For<ISandCoordinator>() .ImplementedBy<SandCoordinator>()); var runtimeConstructorParam = new GenericManager( "This Id Does Not Get Through"); var runtimeArguments = new Arguments( new object[] {runtimeConstructorParam}); var shouldBeParameterizedCoordinator = container .Resolve<ISandCoordinator>(runtimeArguments); Console.WriteLine(shouldBeParameterizedCoordinator.Log); }
控制台输出
Passing generic argument fails Birth from parameterless constructor, which should not happen
如果我在下面注释掉无参数构造函数,我会得到以下exception:
Castle.MicroKernel.Resolvers.DependencyResolverException was unhandled Missing dependency. Component Sand.SandCoordinator`1[[Sand.Simpleton, WindsorSand, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] has a dependency on Sand.IGenericManager`1[Sand.Simpleton], which could not be resolved. Make sure the dependency is correctly registered in the container as a service, or provided as inline argument.
两个构造函数的演示类
class SandCoordinator : ISandCoordinator where TSimpleton : ISimpleton { public SandCoordinator() { Log = "Birth from parameterless constructor, which should not happen"; } public SandCoordinator(IGenericManager manager) { Log = "Birth from parameterized constructor"; Log += Environment.NewLine + "Born With Manager: " + manager.Id; } public string Log { get; private set; } }
解决方案/解决方法?
[ 使用Castle.Core.dll和Castle.Windsor.dll 3.1.0(2012-08-05) ]
您的SandCoordinator
取决于IGenericManager
,而不是GenericManager
。
当你在一个Arguments
中加入一个值,你希望Windsor用作其他东西而不是它的具体类型时,你必须明确它。
上述就是C#学习教程:未能通过Castle Windsor传递通用参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
new Arguments { { typeof(IGenericManager), runtimeConstructorParam } };
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1027831.html