Code:
/ 4.0 / 4.0 / 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. // ==++== // // 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
- DSASignatureFormatter.cs
- MasterPageParser.cs
- XamlReaderHelper.cs
- DataViewListener.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- LinqDataSourceSelectEventArgs.cs
- WebBrowserContainer.cs
- XmlAttributeCollection.cs
- EventLogTraceListener.cs
- ClientApiGenerator.cs
- OletxVolatileEnlistment.cs
- ZipPackage.cs
- GroupItem.cs
- ParallelEnumerable.cs
- TimerEventSubscription.cs
- DataRowComparer.cs
- InputElement.cs
- SqlBuffer.cs
- TextAdaptor.cs
- DataAdapter.cs
- WindowsEditBoxRange.cs
- TryLoadRunnableWorkflowCommand.cs
- InkCanvas.cs
- EventData.cs
- SByteConverter.cs
- VariantWrapper.cs
- SubqueryRules.cs
- XmlDownloadManager.cs
- RuleConditionDialog.cs
- DateTimeOffsetStorage.cs
- WebConfigurationHostFileChange.cs
- CanExpandCollapseAllConverter.cs
- HttpDictionary.cs
- ListViewDeletedEventArgs.cs
- ParseChildrenAsPropertiesAttribute.cs
- StylusDevice.cs
- ImmComposition.cs
- DateTimePicker.cs
- SmtpFailedRecipientException.cs
- PersonalizationProviderHelper.cs
- NameValuePair.cs
- Parser.cs
- NetworkAddressChange.cs
- WebPartMenu.cs
- XmlWrappingReader.cs
- DiscreteKeyFrames.cs
- TemplateDefinition.cs
- DefaultValueAttribute.cs
- ConstraintEnumerator.cs
- FlowDocumentReader.cs
- DesignerVerb.cs
- OutOfMemoryException.cs
- Boolean.cs
- ToolStripItem.cs
- XsltFunctions.cs
- ContentPresenter.cs
- SplitContainer.cs
- XPathChildIterator.cs
- ObjectQuery_EntitySqlExtensions.cs
- SqlCacheDependencyDatabase.cs
- XsdDuration.cs
- WebPartEditorCancelVerb.cs
- DbProviderFactory.cs
- WeakReferenceKey.cs
- SwitchAttribute.cs
- Constraint.cs
- User.cs
- LineServicesCallbacks.cs
- CacheHelper.cs
- RuleProcessor.cs
- CriticalFinalizerObject.cs
- TextCompositionEventArgs.cs
- TextDecorations.cs
- DataRecordInternal.cs
- TextTreeRootNode.cs
- HandlerBase.cs
- RijndaelManagedTransform.cs
- XmlQualifiedName.cs
- DiagnosticsConfigurationHandler.cs
- LocationUpdates.cs
- EdmValidator.cs
- AutoGeneratedFieldProperties.cs
- EntitySqlQueryCacheKey.cs
- SimpleMailWebEventProvider.cs
- HostingEnvironmentWrapper.cs
- IsolatedStorageFileStream.cs
- DispatcherProcessingDisabled.cs
- ProviderBase.cs
- SmtpException.cs
- _ScatterGatherBuffers.cs
- BindingListCollectionView.cs
- Input.cs
- AsymmetricSignatureFormatter.cs
- ValidationErrorEventArgs.cs
- StringAnimationUsingKeyFrames.cs
- TopClause.cs
- AttachInfo.cs
- HtmlToClrEventProxy.cs
- documentsequencetextcontainer.cs
- XmlSchemaAttributeGroup.cs