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
- IPEndPointCollection.cs
- BufferAllocator.cs
- SystemWebExtensionsSectionGroup.cs
- WorkflowInstanceProxy.cs
- WorkflowViewService.cs
- ListViewDataItem.cs
- PathSegment.cs
- KernelTypeValidation.cs
- PeerResolverElement.cs
- DataGridViewLinkCell.cs
- x509utils.cs
- CLSCompliantAttribute.cs
- DataFormat.cs
- _ContextAwareResult.cs
- DirectoryObjectSecurity.cs
- RectangleGeometry.cs
- SourceChangedEventArgs.cs
- MenuItemCollectionEditor.cs
- TemplatedAdorner.cs
- PolyBezierSegmentFigureLogic.cs
- DateTimePicker.cs
- AtomicFile.cs
- ColorMap.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- DataGridViewTextBoxColumn.cs
- Rotation3DAnimation.cs
- ProviderCommandInfoUtils.cs
- SafeSecurityHandles.cs
- Operator.cs
- VBIdentifierDesigner.xaml.cs
- PageContentAsyncResult.cs
- CollectionChangedEventManager.cs
- TreeNodeMouseHoverEvent.cs
- SynchronizationContextHelper.cs
- VBCodeProvider.cs
- smtpconnection.cs
- NavigationPropertyEmitter.cs
- ValueType.cs
- FormViewInsertedEventArgs.cs
- Pair.cs
- ImageMap.cs
- SQLSingle.cs
- TraceContext.cs
- WebPartAuthorizationEventArgs.cs
- CustomErrorCollection.cs
- GridItemPattern.cs
- IssuedSecurityTokenProvider.cs
- AutoCompleteStringCollection.cs
- TextFindEngine.cs
- Internal.cs
- IItemContainerGenerator.cs
- PropagatorResult.cs
- LongSumAggregationOperator.cs
- EdmProperty.cs
- TryLoadRunnableWorkflowCommand.cs
- CalendarDesigner.cs
- DiagnosticTraceSource.cs
- TabRenderer.cs
- odbcmetadatacollectionnames.cs
- SessionStateItemCollection.cs
- ContractNamespaceAttribute.cs
- HebrewCalendar.cs
- Baml2006KeyRecord.cs
- WhitespaceRule.cs
- UnsafeNativeMethodsTablet.cs
- ToolBar.cs
- input.cs
- IndexerNameAttribute.cs
- WebConfigurationManager.cs
- ListViewTableCell.cs
- QueryCoreOp.cs
- ChangeDirector.cs
- BoundPropertyEntry.cs
- StringResourceManager.cs
- QuaternionKeyFrameCollection.cs
- SoapObjectInfo.cs
- SafeReversePInvokeHandle.cs
- UnsafeNativeMethods.cs
- AttributeProviderAttribute.cs
- Process.cs
- SRef.cs
- RepeaterItem.cs
- ConfigXmlDocument.cs
- BuildManager.cs
- HttpProtocolImporter.cs
- XpsResourcePolicy.cs
- HtmlFormWrapper.cs
- Bits.cs
- KerberosSecurityTokenProvider.cs
- DataGridItem.cs
- ThicknessConverter.cs
- WorkflowOperationBehavior.cs
- PassportAuthenticationEventArgs.cs
- DoubleAnimationClockResource.cs
- Message.cs
- TypedReference.cs
- odbcmetadatafactory.cs
- MetadataItemEmitter.cs
- IncrementalCompileAnalyzer.cs
- SQLByteStorage.cs