private void AssertMember <T>(InjectMemberInfo member, string name, string canonicalName, bool isOptional = false) { Assert.That(member.Name, Is.EqualTo(name)); Assert.That(member.Type, Is.EqualTo(typeof(T))); Assert.That(member.IsOptional, Is.EqualTo(isOptional)); Assert.That(member.CanonicalName, Is.EqualTo(canonicalName)); }
private bool TryGetParameterizedBinding <TGenerator>( InjectMemberInfo injectMemberInfo, TypeReference containingType, string memberTypeName, string providedTypeName, Predicate <InjectMemberInfo> isParameterizedBinding, Func <InjectMemberInfo, TypeReference, TGenerator> selector, out TGenerator generator) { generator = default(TGenerator); if (!isParameterizedBinding(injectMemberInfo)) { return(false); } var memberType = injectMemberInfo.Type as GenericInstanceType; if (memberType == null || memberType.GenericArguments.Count != 1) { var error = string.Format( "{0} '{1}' of type '{2}' was detected as '{3}' but is actually a '{4}'; please report this as a bug.", memberTypeName, injectMemberInfo.MemberName, containingType.FullName, providedTypeName, injectMemberInfo.Type.FullName); errorReporter.LogError(error); return(false); } generator = selector(injectMemberInfo, memberType.GenericArguments[0]); return(true); }
private bool TryGetLazyGenerator(InjectMemberInfo injectMemberInfo, TypeReference containingType, string memberTypeName, out LazyBindingGenerator generator) { return(TryGetParameterizedBinding( injectMemberInfo, containingType, memberTypeName, "Lazy<T>", imi => imi.HasLazyKey, (imi, t) => new LazyBindingGenerator(moduleDefinition, references, imi.Key, imi.LazyKey, t), out generator)); }
private bool TryGetProviderGenerator(InjectMemberInfo injectMemberInfo, TypeDefinition containingType, string memberTypeName, out ProviderBindingGenerator generator) { return(TryGetParameterizedBinding( injectMemberInfo, containingType, memberTypeName, "IProvider<T>", imi => imi.HasProviderKey, (imi, t) => new ProviderBindingGenerator(moduleDefinition, references, imi.Key, imi.ProviderKey, t), out generator)); }