summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs4
-rw-r--r--src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs25
-rw-r--r--src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj1
-rw-r--r--src/DotNetOpenAuth.Core/IRequireHostFactories.cs11
-rw-r--r--src/DotNetOpenAuth.Core/Strings.Designer.cs11
-rw-r--r--src/DotNetOpenAuth.Core/Strings.resx3
-rw-r--r--src/DotNetOpenAuth.Core/Util.cs2
-rw-r--r--src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs13
-rw-r--r--src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs4
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs2
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs2
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/UriDiscoveryService.cs9
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs9
13 files changed, 65 insertions, 31 deletions
diff --git a/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs b/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs
index 08bd2a1..0eab939 100644
--- a/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs
+++ b/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs
@@ -42,10 +42,10 @@ namespace DotNetOpenAuth.Configuration {
/// </summary>
/// <param name="allowInternals">if set to <c>true</c> then internal types may be instantiated.</param>
/// <returns>A sequence of instances generated from types in this collection. May be empty, but never null.</returns>
- internal IEnumerable<T> CreateInstances(bool allowInternals) {
+ internal IEnumerable<T> CreateInstances(bool allowInternals, IHostFactories hostFactories) {
return from element in this.Cast<TypeConfigurationElement<T>>()
where !element.IsEmpty
- select element.CreateInstance(default(T), allowInternals);
+ select element.CreateInstance(default(T), allowInternals, hostFactories);
}
/// <summary>
diff --git a/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs b/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs
index d554832..8b3efe0 100644
--- a/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs
+++ b/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs
@@ -76,8 +76,8 @@ namespace DotNetOpenAuth.Configuration {
/// </summary>
/// <param name="defaultValue">The value to return if no type is given in the .config file.</param>
/// <returns>The newly instantiated type.</returns>
- public T CreateInstance(T defaultValue) {
- return this.CreateInstance(defaultValue, false);
+ public T CreateInstance(T defaultValue, IHostFactories hostFactories) {
+ return this.CreateInstance(defaultValue, false, hostFactories);
}
/// <summary>
@@ -85,9 +85,13 @@ namespace DotNetOpenAuth.Configuration {
/// </summary>
/// <param name="defaultValue">The value to return if no type is given in the .config file.</param>
/// <param name="allowInternals">if set to <c>true</c> then internal types may be instantiated.</param>
- /// <returns>The newly instantiated type.</returns>
+ /// <param name="hostFactories">The host factories.</param>
+ /// <returns>
+ /// The newly instantiated type.
+ /// </returns>
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "No apparent problem. False positive?")]
- public T CreateInstance(T defaultValue, bool allowInternals) {
+ public T CreateInstance(T defaultValue, bool allowInternals, IHostFactories hostFactories) {
+ T instance;
if (this.CustomType != null) {
if (!allowInternals) {
// Although .NET will usually prevent our instantiating non-public types,
@@ -95,7 +99,7 @@ namespace DotNetOpenAuth.Configuration {
// But we don't want the host site to be able to do this, so we check ourselves.
ErrorUtilities.VerifyArgument((this.CustomType.Attributes & TypeAttributes.Public) != 0, Strings.ConfigurationTypeMustBePublic, this.CustomType.FullName);
}
- return (T)Activator.CreateInstance(this.CustomType);
+ instance = (T)Activator.CreateInstance(this.CustomType);
} else if (!string.IsNullOrEmpty(this.XamlSource)) {
string source = this.XamlSource;
if (source.StartsWith("~/", StringComparison.Ordinal)) {
@@ -103,11 +107,18 @@ namespace DotNetOpenAuth.Configuration {
source = HttpContext.Current.Server.MapPath(source);
}
using (Stream xamlFile = File.OpenRead(source)) {
- return CreateInstanceFromXaml(xamlFile);
+ instance = CreateInstanceFromXaml(xamlFile);
}
} else {
- return defaultValue;
+ instance = defaultValue;
+ }
+
+ var requiresHostFactories = instance as IRequireHostFactories;
+ if (requiresHostFactories != null) {
+ requiresHostFactories.HostFactories = hostFactories;
}
+
+ return instance;
}
/// <summary>
diff --git a/src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj b/src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj
index e539ea1..ccba40f 100644
--- a/src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj
+++ b/src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj
@@ -21,6 +21,7 @@
<ItemGroup>
<Compile Include="Assumes.cs" />
<Compile Include="IHostFactories.cs" />
+ <Compile Include="IRequireHostFactories.cs" />
<Compile Include="Messaging\Base64WebEncoder.cs" />
<Compile Include="Messaging\Bindings\AsymmetricCryptoKeyStoreWrapper.cs" />
<Compile Include="Messaging\Bindings\CryptoKey.cs" />
diff --git a/src/DotNetOpenAuth.Core/IRequireHostFactories.cs b/src/DotNetOpenAuth.Core/IRequireHostFactories.cs
new file mode 100644
index 0000000..b2d7af8
--- /dev/null
+++ b/src/DotNetOpenAuth.Core/IRequireHostFactories.cs
@@ -0,0 +1,11 @@
+//-----------------------------------------------------------------------
+// <copyright file="IRequireHostFactories.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOpenAuth {
+ public interface IRequireHostFactories {
+ IHostFactories HostFactories { get; set; }
+ }
+}
diff --git a/src/DotNetOpenAuth.Core/Strings.Designer.cs b/src/DotNetOpenAuth.Core/Strings.Designer.cs
index b0e66d2..9eefd62 100644
--- a/src/DotNetOpenAuth.Core/Strings.Designer.cs
+++ b/src/DotNetOpenAuth.Core/Strings.Designer.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
-// Runtime Version:4.0.30319.17622
+// Runtime Version:4.0.30319.18010
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -97,6 +97,15 @@ namespace DotNetOpenAuth {
}
/// <summary>
+ /// Looks up a localized string similar to The HostFactories property must be set first..
+ /// </summary>
+ internal static string HostFactoriesRequired {
+ get {
+ return ResourceManager.GetString("HostFactoriesRequired", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to The argument has an unexpected value..
/// </summary>
internal static string InvalidArgument {
diff --git a/src/DotNetOpenAuth.Core/Strings.resx b/src/DotNetOpenAuth.Core/Strings.resx
index f4d61d1..133fe6f 100644
--- a/src/DotNetOpenAuth.Core/Strings.resx
+++ b/src/DotNetOpenAuth.Core/Strings.resx
@@ -141,4 +141,7 @@
<data name="ResponseBodyNotSupported" xml:space="preserve">
<value>This object contains a response body, which is not supported.</value>
</data>
+ <data name="HostFactoriesRequired" xml:space="preserve">
+ <value>The HostFactories property must be set first.</value>
+ </data>
</root> \ No newline at end of file
diff --git a/src/DotNetOpenAuth.Core/Util.cs b/src/DotNetOpenAuth.Core/Util.cs
index ec28c50..279b7d3 100644
--- a/src/DotNetOpenAuth.Core/Util.cs
+++ b/src/DotNetOpenAuth.Core/Util.cs
@@ -30,7 +30,7 @@ namespace DotNetOpenAuth {
/// <summary>
/// The web.config file-specified provider of web resource URLs.
/// </summary>
- private static IEmbeddedResourceRetrieval embeddedResourceRetrieval = MessagingElement.Configuration.EmbeddedResourceRetrievalProvider.CreateInstance(null, false);
+ private static IEmbeddedResourceRetrieval embeddedResourceRetrieval = MessagingElement.Configuration.EmbeddedResourceRetrievalProvider.CreateInstance(null, false, null);
/// <summary>
/// Gets a human-readable description of the library name and version, including
diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs
index 6a517ad..910272e 100644
--- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs
+++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs
@@ -42,7 +42,7 @@ namespace DotNetOpenAuth.OpenId {
/// and the XMLDSig spec referenced in that spec can be found at:
/// http://wiki.oasis-open.org/xri/XrdOne/XmlDsigProfile
/// </remarks>
- public class HostMetaDiscoveryService : IIdentifierDiscoveryService {
+ public class HostMetaDiscoveryService : IIdentifierDiscoveryService, IRequireHostFactories {
/// <summary>
/// The URI template for discovery host-meta on domains hosted by
/// Google Apps for Domains.
@@ -67,14 +67,11 @@ namespace DotNetOpenAuth.OpenId {
/// <summary>
/// Initializes a new instance of the <see cref="HostMetaDiscoveryService"/> class.
/// </summary>
- public HostMetaDiscoveryService(IHostFactories hostFactories) {
- Requires.NotNull(hostFactories, "hostFactories");
-
+ public HostMetaDiscoveryService() {
this.TrustedHostMetaProxies = new List<HostMetaProxy>();
- this.HostFactories = hostFactories;
}
- public IHostFactories HostFactories { get; private set; }
+ public IHostFactories HostFactories { get; set; }
/// <summary>
/// Gets the set of URI templates to use to contact host-meta hosting proxies
@@ -117,6 +114,10 @@ namespace DotNetOpenAuth.OpenId {
/// A sequence of service endpoints yielded by discovery. Must not be null, but may be empty.
/// </returns>
public async Task<IdentifierDiscoveryServiceResult> DiscoverAsync(Identifier identifier, CancellationToken cancellationToken) {
+ Requires.NotNull(identifier, "identifier");
+ Verify.Operation(this.HostFactories != null, Strings.HostFactoriesRequired);
+ cancellationToken.ThrowIfCancellationRequested();
+
// Google Apps are always URIs -- not XRIs.
var uriIdentifier = identifier as UriIdentifier;
if (uriIdentifier == null) {
diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs
index a55e042..2ffc016 100644
--- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs
+++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs
@@ -96,7 +96,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty {
/// Initializes a new instance of the <see cref="OpenIdRelyingParty"/> class.
/// </summary>
public OpenIdRelyingParty()
- : this(OpenIdElement.Configuration.RelyingParty.ApplicationStore.CreateInstance(HttpApplicationStore)) {
+ : this(OpenIdElement.Configuration.RelyingParty.ApplicationStore.CreateInstance(HttpApplicationStore, null)) {
}
/// <summary>
@@ -122,7 +122,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty {
this.securitySettings = OpenIdElement.Configuration.RelyingParty.SecuritySettings.CreateSecuritySettings();
this.behaviors.CollectionChanged += this.OnBehaviorsChanged;
- foreach (var behavior in OpenIdElement.Configuration.RelyingParty.Behaviors.CreateInstances(false)) {
+ foreach (var behavior in OpenIdElement.Configuration.RelyingParty.Behaviors.CreateInstances(false, null)) {
this.behaviors.Add(behavior);
}
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs
index ddd60f3..3f88d41 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs
@@ -72,7 +72,7 @@ namespace DotNetOpenAuth.OpenId.Extensions {
var factoriesElement = DotNetOpenAuth.Configuration.OpenIdElement.Configuration.ExtensionFactories;
var aggregator = new OpenIdExtensionFactoryAggregator();
aggregator.Factories.Add(new StandardOpenIdExtensionFactory());
- aggregator.factories.AddRange(factoriesElement.CreateInstances(false));
+ aggregator.factories.AddRange(factoriesElement.CreateInstances(false, null));
return aggregator;
}
}
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs
index 4d55c5c..2803c22 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs
@@ -36,7 +36,7 @@ namespace DotNetOpenAuth.OpenId {
Requires.NotNull(host, "host");
this.host = host;
- this.discoveryServices.AddRange(OpenIdElement.Configuration.RelyingParty.DiscoveryServices.CreateInstances(true));
+ this.discoveryServices.AddRange(OpenIdElement.Configuration.RelyingParty.DiscoveryServices.CreateInstances(true, host.HostFactories));
}
/// <summary>
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/UriDiscoveryService.cs b/src/DotNetOpenAuth.OpenId/OpenId/UriDiscoveryService.cs
index 25eebe6..c5b7bb6 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/UriDiscoveryService.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/UriDiscoveryService.cs
@@ -25,16 +25,14 @@ namespace DotNetOpenAuth.OpenId {
/// <summary>
/// The discovery service for URI identifiers.
/// </summary>
- public class UriDiscoveryService : IIdentifierDiscoveryService {
+ public class UriDiscoveryService : IIdentifierDiscoveryService, IRequireHostFactories {
/// <summary>
/// Initializes a new instance of the <see cref="UriDiscoveryService"/> class.
/// </summary>
- public UriDiscoveryService(IHostFactories hostFactories) {
- Requires.NotNull(hostFactories, "hostFactories");
- this.HostFactories = hostFactories;
+ public UriDiscoveryService() {
}
- public IHostFactories HostFactories { get; private set; }
+ public IHostFactories HostFactories { get; set; }
#region IIdentifierDiscoveryService Members
@@ -49,6 +47,7 @@ namespace DotNetOpenAuth.OpenId {
/// </returns>
public async Task<IdentifierDiscoveryServiceResult> DiscoverAsync(Identifier identifier, CancellationToken cancellationToken) {
Requires.NotNull(identifier, "identifier");
+ Verify.Operation(this.HostFactories != null, Strings.HostFactoriesRequired);
cancellationToken.ThrowIfCancellationRequested();
var uriIdentifier = identifier as UriIdentifier;
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs b/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs
index 0f9b746..e13b027 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs
@@ -27,7 +27,7 @@ namespace DotNetOpenAuth.OpenId {
/// The discovery service for XRI identifiers that uses an XRI proxy resolver for discovery.
/// </summary>
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Xri", Justification = "Acronym")]
- public class XriDiscoveryProxyService : IIdentifierDiscoveryService {
+ public class XriDiscoveryProxyService : IIdentifierDiscoveryService, IRequireHostFactories {
/// <summary>
/// The magic URL that will provide us an XRDS document for a given XRI identifier.
/// </summary>
@@ -43,12 +43,10 @@ namespace DotNetOpenAuth.OpenId {
/// <summary>
/// Initializes a new instance of the <see cref="XriDiscoveryProxyService"/> class.
/// </summary>
- public XriDiscoveryProxyService(IHostFactories hostFactories) {
- Requires.NotNull(hostFactories, "hostFactories");
- this.HostFactories = hostFactories;
+ public XriDiscoveryProxyService() {
}
- public IHostFactories HostFactories { get; private set; }
+ public IHostFactories HostFactories { get; set; }
#region IDiscoveryService Members
@@ -62,6 +60,7 @@ namespace DotNetOpenAuth.OpenId {
/// </returns>
public async Task<IdentifierDiscoveryServiceResult> DiscoverAsync(Identifier identifier, CancellationToken cancellationToken) {
Requires.NotNull(identifier, "identifier");
+ Verify.Operation(this.HostFactories != null, Strings.HostFactoriesRequired);
var xriIdentifier = identifier as XriIdentifier;
if (xriIdentifier == null) {