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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EntityDataSourceDesigner.cs
- TransactionException.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- SqlInternalConnectionSmi.cs
- BatchStream.cs
- CustomAttributeBuilder.cs
- Queue.cs
- XmlSchemaAppInfo.cs
- sqlinternaltransaction.cs
- WebEvents.cs
- base64Transforms.cs
- DataGridCommandEventArgs.cs
- EncoderBestFitFallback.cs
- ClientBuildManager.cs
- VirtualizingPanel.cs
- WindowsEditBox.cs
- PackageProperties.cs
- RealProxy.cs
- EntityParameterCollection.cs
- TextRangeBase.cs
- StringFreezingAttribute.cs
- FileClassifier.cs
- GenericWebPart.cs
- ScriptManager.cs
- StateDesigner.CommentLayoutGlyph.cs
- BackgroundFormatInfo.cs
- CmsInterop.cs
- HttpListener.cs
- PropertyGridEditorPart.cs
- CategoryState.cs
- WebSysDescriptionAttribute.cs
- ADMembershipProvider.cs
- TextSelectionProcessor.cs
- AutomationPatternInfo.cs
- ViewLoader.cs
- BeginSelectCardRequest.cs
- ContentValidator.cs
- BackgroundWorker.cs
- StateElement.cs
- FieldNameLookup.cs
- CodeAccessSecurityEngine.cs
- IFlowDocumentViewer.cs
- EventLogPermissionHolder.cs
- ModifierKeysConverter.cs
- CodeMemberProperty.cs
- DataContractSerializerServiceBehavior.cs
- DeviceSpecificDesigner.cs
- WindowsFont.cs
- Polygon.cs
- XmlSiteMapProvider.cs
- CacheDependency.cs
- FileFormatException.cs
- FieldBuilder.cs
- PathFigureCollectionConverter.cs
- ICollection.cs
- BinaryFormatterWriter.cs
- MiniParameterInfo.cs
- ServerIdentity.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- CodeDelegateInvokeExpression.cs
- HttpDictionary.cs
- FileDialogCustomPlace.cs
- TypeCodeDomSerializer.cs
- TextTreeExtractElementUndoUnit.cs
- HttpApplication.cs
- StrongNamePublicKeyBlob.cs
- Vector3DCollectionConverter.cs
- DataGridItemEventArgs.cs
- ReadOnlyHierarchicalDataSourceView.cs
- FigureParaClient.cs
- OutputCacheSection.cs
- DetailsViewModeEventArgs.cs
- FixedFindEngine.cs
- LassoHelper.cs
- DesignerSerializationOptionsAttribute.cs
- PageEventArgs.cs
- DataSet.cs
- SequenceFullException.cs
- ChildChangedEventArgs.cs
- WorkflowServiceAttributesTypeConverter.cs
- ContentWrapperAttribute.cs
- ButtonBase.cs
- Helper.cs
- ProxyWebPartManager.cs
- OdbcDataAdapter.cs
- IconEditor.cs
- SourceInterpreter.cs
- BamlResourceDeserializer.cs
- ImageSourceValueSerializer.cs
- AdRotator.cs
- ReadOnlyCollectionBase.cs
- MaterialGroup.cs
- PolyBezierSegmentFigureLogic.cs
- PropertyEmitter.cs
- CategoryAttribute.cs
- LayoutUtils.cs
- ExtenderProvidedPropertyAttribute.cs
- ExpandSegment.cs
- GeometryHitTestResult.cs
- TypeGeneratedEventArgs.cs