Sto cercando di registrare un componente da risolvere con parametri basati sulla classe per cui potrebbe essere risolto. (Suona un po 'di confusione, quindi mostrerò un esempio).Autofac: registra componente e risolve a seconda della risoluzione genitore
Ecco un oggetto che utilizza un registratore:
class MyObject : IMyObject
{
public ILogger Logger;
public MyObject(ILogger logger)
{
Logger = logger;
}
}
Ora il logger che viene passato in potrebbe essere diverso da classe a classe. Così ho un'idea piuttosto patch per come fare qui di seguito:
class MyLogger : ILogger
{
public string Name{get; protected set;}
public static ILogger GetLogger(string className)
{
Name = className;
MyLogger logger;
// Do something to choose a logger for that specific class
return logger;
}
}
Così, quando mi registro Logger Voglio essere in grado di dire che il className. Spero ci sia un modo per farlo simile a questo:
ContainerBuilder builder = new ContainerBuilder();
builder.Register<MyLogger>(ctx =>
{
string className = //Get resolving class name somehow;
return MyLogger.GetLogger(className);
}).As<ILogger>();
builder.Register<MyObject>().As<IMyObject>();
var container = builder.Build();
IMyObject myObj = container.Resolve<IMyObject>();
//myObject.Logger.Name should now == "MyObject"
Il motivo che voglio fare in questo modo è quello di evitare la registrazione di ogni classe a implementare con un registratore con autofac nel codice. Voglio essere in grado di registrare tutti gli oggetti in xml e semplicemente avere un LoggerModule, che aggiunge questa registrazione.
Grazie in anticipo!
sto cercando di implementare il modulo, ma io non sto trovando la builder.Register() la funzione non generico . – philt5252
È un metodo di estensione che esiste nella classe 'Autofac.RegistrationExtensions'. Dovresti assolutamente averlo. –
haha ... non importa ... Non ho finito di digitare il codice e ho dimenticato che C# implica il tipo da Func. – philt5252