c# – 为什么继承的字段不属于最终类型
我有以下代码
public abstract class Parent { AnObject AProperty {get; set;} } public class ChildA : Parent { } public class ChildB : Parent { } 当我通过反射访问ChildA的实例时,我看到其成员AProperty的DeclaringType等于Parent.可悲的是,我想依靠反思来确定谁是ChildA,谁是ChildB. 更多上下文:我实际上是尝试通过NInject使用when子句绑定AProperty,以便根据要创建的对象的实际类型进行不同的解析.这是一个简单的例子: Kernel.Bind<AnObject>().ToConstructor(..).WhenAnyAncestorMatches(c => c.Request.Target.Member .DeclaringType.IsAssignableFrom(typeof(ChildA)) Kernel.Bind<AnObject>().ToConstructor(..).WhenAnyAncestorMatches(c => c.Request.Target.Member .DeclaringType.IsAssignableFrom(typeof(ChildB)) 问题: >我做错了什么? 解决方法
如果我找到了你,你想要将不同的AnObject注入属性AProperty,具体取决于它注入的子类.
提示:如果没有令人信服的理由不这样做,你应该使用构造函数注入而不是属性(或方法)注入. 所以这基本上意味着你想要一个WhenInjectedInto<>的组合.和WhenAnyAncestorMatches.您可以查看WhenInjectedInto<>的实现. here并使用相同的逻辑作为WhenAnyAncestorMatches的参数,或者您可以使用一些有点肮脏的技巧来组合两者: var binding = Kernel.Bind<AnObject>().ToConstructor(..); Func<IRequest,bool> whenInjectedIntoCondition = binding.WhenInjectedInto<int>().BindingConfiguration.Condition; binding.WhenAnyAncestorMatches(c => whenInjectedIntoCondition(c.Request)); 使用构造函数注入,我不是100%确定它是否也适用于属性注入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |