ctor без параметров существует, но единство переходит к другому при разрешении - PullRequest
0 голосов
/ 02 марта 2012

Я получаю следующее сообщение об ошибке:

 mConsumerTokenManager = (IConsumerTokenManager)container.Resolve(typeof(IConsumerTokenManager), null);

, хотя у меня есть

public class InMemoryTokenManager : IConsumerTokenManager, IOpenIdOAuthTokenManager
{
    private Dictionary<string, string> tokensAndSecrets = new Dictionary<string, string>();


public InMemoryTokenManager(){}

    /// <summary>
    /// Initializes a new instance of the <see cref="Ugi.Server.Authentication.Consumers.InMemoryTokenManager"/> class.
    /// </summary>
    /// <param name="consumerKey">The consumer key.</param>
    /// <param name="consumerSecret">The consumer secret.</param>
    public InMemoryTokenManager(string consumerKey, string consumerSecret)
    {
        if (String.IsNullOrEmpty(consumerKey))
        {
            throw new ArgumentNullException("consumerKey");
        }

        this.ConsumerKey = consumerKey;
        this.ConsumerSecret = consumerSecret;
    }
Resolution of the dependency failed, type = "DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager", name =

"(нет)".Исключение произошло во время: при разрешении.Исключение: InvalidOperationException - тип String не может быть создан.Вы должны сконфигурировать контейнер для предоставления этого значения.----------------------------------------------- В это времяисключения: контейнер был:

  Resolving Ugi.Server.Authentication.Consumers.InMemoryTokenManager,(none)

(сопоставлен с DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager, (нет)) Параметр разрешения «consumerKey» конструктора Ugi.Server.Authentication.Consumers.InMemoryTokenMan (.String consumerKey, System.String consumerSecret) Разрешение System.String, (нет)

1 Ответ

2 голосов
/ 02 марта 2012

Если целевой класс содержит более одного конструктора, Unity будет использовать тот, к которому применен атрибут InjectionConstructor. Если существует более одного конструктора, и ни один не несет Атрибут InjectionConstructor, Unity будет использовать конструктор с большинство параметров. Если существует более одного такого конструктора (более чем один из «самых длинных» с таким же количеством параметров), Unity вызовет исключение.

Вы можете использовать следующий код при регистрации, чтобы сообщить Unity, какой конструктор использовать:

this.container.RegisterType<IConsumerTokenManager, InMemoryTokenManager>(new InjectionConstructor());
...