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
- BasicHttpMessageSecurityElement.cs
- ItemsControl.cs
- CacheEntry.cs
- SetStoryboardSpeedRatio.cs
- TableLayoutPanel.cs
- NCryptNative.cs
- String.cs
- StoreItemCollection.cs
- BaseResourcesBuildProvider.cs
- GroupQuery.cs
- CodePropertyReferenceExpression.cs
- DesignerOptionService.cs
- DrawingBrush.cs
- ReliabilityContractAttribute.cs
- SystemResourceKey.cs
- XmlSchemaSimpleTypeRestriction.cs
- SerializableAttribute.cs
- CFStream.cs
- PageHandlerFactory.cs
- Track.cs
- RotateTransform.cs
- ProxyHelper.cs
- _AutoWebProxyScriptHelper.cs
- StandardCommands.cs
- ApplicationException.cs
- TypeSemantics.cs
- SpecularMaterial.cs
- ValidationRuleCollection.cs
- NativeMethods.cs
- BaseParagraph.cs
- DrawingContextDrawingContextWalker.cs
- Compilation.cs
- ColorMap.cs
- MeasureItemEvent.cs
- NotifyIcon.cs
- MetadataUtilsSmi.cs
- HMACRIPEMD160.cs
- MaskDescriptors.cs
- SessionEndingEventArgs.cs
- SqlFileStream.cs
- PointAnimationClockResource.cs
- ManualResetEvent.cs
- UniqueIdentifierService.cs
- WebPartTransformerCollection.cs
- CaseInsensitiveOrdinalStringComparer.cs
- SamlSecurityToken.cs
- Int64Storage.cs
- DependencyProperty.cs
- RSAPKCS1KeyExchangeFormatter.cs
- Int32EqualityComparer.cs
- WebBrowserNavigatingEventHandler.cs
- StandardToolWindows.cs
- XmlCustomFormatter.cs
- TimeZone.cs
- XmlBaseReader.cs
- TableRowGroupCollection.cs
- LinkConverter.cs
- DataGridViewControlCollection.cs
- ErrorTableItemStyle.cs
- MemberProjectionIndex.cs
- DoubleAnimationUsingPath.cs
- XmlNamedNodeMap.cs
- DeferredTextReference.cs
- IgnorePropertiesAttribute.cs
- FixedStringLookup.cs
- HttpCapabilitiesSectionHandler.cs
- HtmlWindow.cs
- HtmlShim.cs
- DiagnosticsConfigurationHandler.cs
- HtmlWindow.cs
- PropertyRecord.cs
- StorageTypeMapping.cs
- Pair.cs
- DmlSqlGenerator.cs
- DllHostInitializer.cs
- DurableInstanceManager.cs
- WindowsFormsSynchronizationContext.cs
- _ShellExpression.cs
- Soap.cs
- PropertyKey.cs
- InvalidContentTypeException.cs
- TreeWalkHelper.cs
- ControlIdConverter.cs
- StateWorkerRequest.cs
- HttpPostedFile.cs
- CredentialManagerDialog.cs
- DelimitedListTraceListener.cs
- ComponentResourceKey.cs
- CngAlgorithm.cs
- CommonProperties.cs
- PtsHelper.cs
- ISessionStateStore.cs
- HGlobalSafeHandle.cs
- PersonalizationProviderCollection.cs
- DesignerProperties.cs
- BitmapEffectState.cs
- Rethrow.cs
- ActivityExecutionContextCollection.cs
- Point3DIndependentAnimationStorage.cs
- ComPlusTraceRecord.cs