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
- AccessText.cs
- Metadata.cs
- PropertyPathWorker.cs
- CategoryAttribute.cs
- BindingCompleteEventArgs.cs
- ListViewItem.cs
- SharedStatics.cs
- HiddenFieldPageStatePersister.cs
- InstanceView.cs
- WebResponse.cs
- HttpPostLocalhostServerProtocol.cs
- BlockCollection.cs
- TextTrailingWordEllipsis.cs
- DataViewManagerListItemTypeDescriptor.cs
- XmlNamespaceManager.cs
- ToolStripDropDownButton.cs
- RepeaterDesigner.cs
- ExceptionHandler.cs
- EventHandlers.cs
- RegexCapture.cs
- MethodExpr.cs
- PageThemeBuildProvider.cs
- CaseInsensitiveOrdinalStringComparer.cs
- MatrixAnimationUsingKeyFrames.cs
- FormattedTextSymbols.cs
- ComplexType.cs
- UpdateCommand.cs
- TypeSystem.cs
- C14NUtil.cs
- TdsParserHelperClasses.cs
- FixedBufferAttribute.cs
- WindowsTreeView.cs
- BooleanKeyFrameCollection.cs
- Visitors.cs
- TrustManagerPromptUI.cs
- EventMappingSettings.cs
- SafeNativeMethods.cs
- DocumentViewerBaseAutomationPeer.cs
- ConditionalAttribute.cs
- StylusTouchDevice.cs
- URLIdentityPermission.cs
- DesignBindingPropertyDescriptor.cs
- DeclaredTypeElement.cs
- ExpressionBuilderCollection.cs
- CompositeTypefaceMetrics.cs
- Matrix.cs
- UnsafeNativeMethods.cs
- Operators.cs
- Encoder.cs
- VirtualizingPanel.cs
- OrderingInfo.cs
- DbProviderFactoriesConfigurationHandler.cs
- UnmanagedMemoryStream.cs
- TCPListener.cs
- ObjectSecurity.cs
- DateTimeOffset.cs
- FileDialog.cs
- DbConnectionOptions.cs
- DrawingGroup.cs
- TemplateParser.cs
- CqlIdentifiers.cs
- DtdParser.cs
- TextEditorTyping.cs
- EventLogQuery.cs
- DecimalAnimation.cs
- HttpApplicationFactory.cs
- InterleavedZipPartStream.cs
- NameTable.cs
- NameScopePropertyAttribute.cs
- WebMethodAttribute.cs
- DataGridState.cs
- MenuAdapter.cs
- ColumnClickEvent.cs
- OpCodes.cs
- GB18030Encoding.cs
- ClipboardData.cs
- TextUtf8RawTextWriter.cs
- OleCmdHelper.cs
- QueryOutputWriter.cs
- PathNode.cs
- NamedObject.cs
- RelatedEnd.cs
- CompositeControl.cs
- ScriptManager.cs
- XmlArrayAttribute.cs
- BinHexDecoder.cs
- ExpressionVisitor.cs
- MeasurementDCInfo.cs
- DataListItem.cs
- BlobPersonalizationState.cs
- BitmapScalingModeValidation.cs
- InfoCardX509Validator.cs
- WindowsAuthenticationModule.cs
- AxHost.cs
- Point3DCollectionConverter.cs
- SqlDataSourceStatusEventArgs.cs
- HttpListenerTimeoutManager.cs
- MenuItem.cs
- DbConnectionPool.cs
- Vector3DCollection.cs