ОК, я знаю, что ваш последний пост был несколько месяцев назад, но если вы все еще работали над этим (или для таких людей, как я, которые хотели бы увидеть ответ на этот вопрос), вот некоторая информация относительно NullReferenceException
вы столкнулись с созданием запроса OAuth:
Пустая ссылка взята из IServiceLocator
, который используется для разрешения зависимостей. Если вы явно не передаете его в конструктор, он использует статическое свойство ServiceLocator.Current
в пространстве имен Microsoft.Practices.ServiceLocation
.
Это одна из многих ловушек использования статических методов и глобального состояния, если вы скрываете подобные проблемы от потребителя своего API. Так что если вы не указали локатор службы по умолчанию, то возвращается null
, в результате чего NullReferenceException
.
Итак, чтобы решить эту проблему, я реализовал реализацию IServiceLocator
, в которой в качестве контейнера используется StructureMap (один из множества доступных контейнеров IoC). Наконец, вам нужно зарегистрировать экземпляры для двух интерфейсов: ISigningProvider
и INonceProvider
. К счастью, в сборке OAuth.Net.Components существует несколько стандартных реализаций, таких как GuidNonceProvider и HmacSha1SigningProvider.
Полученный код выглядит примерно так:
var container = new Container();
container.Configure(a => a.For<INonceProvider>().Use<GuidNonceProvider>());
container.Configure(a => a.For<ISigningProvider>()
.Use<HmacSha1SigningProvider>()
.Named("signing.provider:HMAC-SHA1"));
var locator = new StructureMapAdapter(container);
ServiceLocator.SetLocatorProvider(delegate { return locator; });
Я понимаю, что это не окончательное решение вашего первоначального вопроса (я все еще работаю над тем, чтобы он сам работал), но я надеюсь, что это продвинет вас на несколько шагов дальше. И если вы вообще давно отказались от этой реализации ... ну, в любом случае, удачного кодирования!