Csharp/C#教程:未能通过Castle Windsor传递通用参数分享


未能通过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

(0)
上一篇 2022年1月10日
下一篇 2022年1月10日

精彩推荐