Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / AddIn / AddIn / System / Addin / Hosting / Store / AddInAdapter.cs / 1305376 / AddInAdapter.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: AddInAdapter ** ** Purpose: Represents an add-in adapter on disk ** ===========================================================*/ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Reflection; using System.Text; using System.AddIn.MiniReflection; using System.Diagnostics.Contracts; namespace System.AddIn { [Serializable] internal sealed class AddInAdapter : PipelineComponent { private List_contracts; private List _constructors; public AddInAdapter(TypeInfo typeInfo, String assemblyLocation) : base(typeInfo, assemblyLocation) { _contracts = new List (); _constructors = new List (); } public List Constructors { get { return _constructors; } } public List Contracts { get { return _contracts; } } public override String ToString() { return String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterToString, Name, BestAvailableLocation); } internal override bool Validate(Type type, Collection warnings) { System.Diagnostics.Contracts.Contract.Assert(type.Assembly.ReflectionOnly && IContractInReflectionLoaderContext.Assembly.ReflectionOnly, "Both the type and IContract should be in the ReflectionOnly loader context"); if (!type.IsMarshalByRef) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterMustBeMBRO, type.AssemblyQualifiedName)); return false; } //if (!type.Implements(typeofIContract)) if (!IContractInReflectionLoaderContext.IsAssignableFrom(type)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterMustImplementAnAddInContract, type.AssemblyQualifiedName)); return false; } foreach (Type contractInterface in type.GetInterfaces()) { //if (contractInterface.Implements(typeofIContract)) if (IContractInReflectionLoaderContext.IsAssignableFrom(contractInterface)) _contracts.Add(new TypeInfo(contractInterface)); } if (_contracts.Count == 0) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterMustImplementAnAddInContract, type.AssemblyQualifiedName)); return false; } foreach (ConstructorInfo ctor in type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { ParameterInfo[] pars = ctor.GetParameters(); if (pars.Length != 1) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterOneUnusableConstructor, type.AssemblyQualifiedName)); continue; } _constructors.Add(new TypeInfo(pars[0].ParameterType)); } if (_constructors.Count == 0) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInAdapterNoUsableConstructors, type.AssemblyQualifiedName)); return false; } return base.Validate(type, warnings); } // Imagine a generic AddInBase (AB ), and an AddInAdapter with a // constructor taking in AB . If we have IntAddIn : AB , // then we should be able to hook this up. internal bool CanConnectTo(AddInBase addInBase) { System.Diagnostics.Contracts.Contract.Requires(addInBase != null); if (!addInBase.TypeInfo.IsGeneric) { if (this.Constructors.Contains(addInBase.TypeInfo)) return true; // return true if we have a constructor that accepts one of addinBase's ActivatableAs base classes if (addInBase._activatableAs != null) { foreach (TypeInfo activatableAsTypeInfo in addInBase._activatableAs) { if (this.Constructors.Contains(activatableAsTypeInfo)) return true; } } } else { return false; } return false; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NavigationWindow.cs
- AnnotationStore.cs
- HtmlLink.cs
- WebPartEditorOkVerb.cs
- ListBindingConverter.cs
- SessionPageStatePersister.cs
- SerializationException.cs
- DbFunctionCommandTree.cs
- ScrollBarAutomationPeer.cs
- SessionState.cs
- SerializationObjectManager.cs
- Menu.cs
- TranslateTransform3D.cs
- BasicCommandTreeVisitor.cs
- EntityCommandExecutionException.cs
- UshortList2.cs
- SpinWait.cs
- DockProviderWrapper.cs
- FontSourceCollection.cs
- WebPartManagerInternals.cs
- MenuEventArgs.cs
- DataSourceHelper.cs
- CommonGetThemePartSize.cs
- WebUtil.cs
- WrapperSecurityCommunicationObject.cs
- OleDbStruct.cs
- unsafenativemethodstextservices.cs
- StrokeCollection.cs
- AssemblyBuilder.cs
- DurableInstanceProvider.cs
- SerializationObjectManager.cs
- PixelShader.cs
- X509CertificateCollection.cs
- LockedActivityGlyph.cs
- SynchronizationContext.cs
- CrossAppDomainChannel.cs
- ExpressionConverter.cs
- UpDownBase.cs
- XmlHierarchicalEnumerable.cs
- Lease.cs
- OleDbStruct.cs
- ParentQuery.cs
- CodeObject.cs
- DLinqColumnProvider.cs
- RtfNavigator.cs
- SqlInternalConnectionSmi.cs
- EmptyEnumerable.cs
- _NetworkingPerfCounters.cs
- RegistrySecurity.cs
- WindowsTreeView.cs
- ComboBoxDesigner.cs
- EventlogProvider.cs
- DrawToolTipEventArgs.cs
- ColorPalette.cs
- AppManager.cs
- TextBounds.cs
- ExpressionBuilder.cs
- DirectionalLight.cs
- SharedUtils.cs
- FaultContractAttribute.cs
- TreeViewEvent.cs
- InstanceDescriptor.cs
- TcpTransportManager.cs
- Stylesheet.cs
- PropertyTab.cs
- XmlRootAttribute.cs
- Utilities.cs
- MouseEvent.cs
- ResourceDisplayNameAttribute.cs
- LockRecursionException.cs
- ECDiffieHellmanCng.cs
- XmlExpressionDumper.cs
- SecondaryIndex.cs
- WindowsGraphics2.cs
- DesignerTextViewAdapter.cs
- ChannelManagerBase.cs
- RepeaterItemEventArgs.cs
- EmptyEnumerable.cs
- SqlUdtInfo.cs
- QilLoop.cs
- SortedList.cs
- PKCS1MaskGenerationMethod.cs
- StyleModeStack.cs
- PageFunction.cs
- SiteMapPathDesigner.cs
- ShaperBuffers.cs
- DbConnectionPoolGroupProviderInfo.cs
- TemplateKey.cs
- ClientEventManager.cs
- PropagatorResult.cs
- ConfigurationSectionGroup.cs
- ProfileParameter.cs
- SerializationSectionGroup.cs
- XmlSchemaSimpleContent.cs
- XmlDataSourceView.cs
- __TransparentProxy.cs
- CompiledRegexRunner.cs
- _LoggingObject.cs
- HelpEvent.cs
- DataGridViewColumnTypeEditor.cs