Ho una semplice applicazione console in cui ho la seguente configurazione:tipo di nome non utilizzato per l'iniezione costruttore
public interface ILogger
{
void Log(string message);
}
class NullLogger : ILogger
{
private readonly string version;
public NullLogger()
{
version = "1.0";
}
public NullLogger(string v)
{
version = v;
}
public void Log(string message)
{
Console.WriteLine("NULL> " + version + " : " + message);
}
}
I dettagli di configurazione sono al di sotto:
<type type="UnityConsole.ILogger, UnityConsole" mapTo="UnityConsole.NullLogger, UnityConsole">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<constructor>
<param name="message" parameterType="System.String" >
<value value="2.0" type="System.String"/>
</param>
</constructor>
</typeConfig>
mio codice chiamante è la seguente:
IUnityContainer container = new UnityContainer();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Containers.Default.Configure(container);
ILogger nullLogger = container.Resolve<ILogger>();
nullLogger.Log("hello");
Questo funziona bene, ma una volta che dare un nome a questo tipo qualcosa di simile:
<type type="UnityConsole.ILogger, UnityConsole" mapTo="UnityConsole.NullLogger, UnityConsole" name="NullLogger">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<constructor>
<param name="message" parameterType="System.String" >
<value value="2.0" type="System.String"/>
</param>
</constructor>
</typeConfig>
Il codice chiamante sopra non funziona, anche se mi registro in modo esplicito il tipo utilizzando
container.RegisterType<ILogger, NullLogger>();
Viene visualizzato l'errore:
{"Risoluzione della dipendenza non riuscita, digitare = \" UnityConsole.ILogger \ ", name = \" \ ". Il messaggio di eccezione è: L'operazione di compilazione corrente (chiave di build Key build [UnityConsole.NullLogger, null]) non è riuscita: il parametro v non può essere risolto durante il tentativo di chiamare il costruttore UnityConsole.NullLogger (System.String v). (Strategia tipo BuildPlanStrategy, indice 3) "}
Perché non l'unità sguardo istanze denominate Per farlo funzionare, dovrò fare:?
ILogger nullLogger = container.Resolve<ILogger>("NullLogger");
Dove si trova questo comportamento documentato?
Arun
Molto bella spiegazione. Grazie Alex. – Arun