Chcę zarejestrować komponent do rozwiązania za pomocą parametrów opartych na klasie, dla której może on być rozwiązywany. (To trochę dezorientuje, więc pokażę przykład).Autofac: Zarejestruj komponent i rozwiąż problem w zależności od rozpoznawania rodzica
Oto przedmiot, który korzysta z rejestratora:
class MyObject : IMyObject
{
public ILogger Logger;
public MyObject(ILogger logger)
{
Logger = logger;
}
}
Teraz rejestrator, który jest przekazywany w może różnić się od klasy do klasy. Więc mam raczej poprawionej pomysł jak to zrobić poniżej:
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;
}
}
Więc kiedy zarejestrować Logger Chcę móc powiedzieć go className. Mam nadzieję, że istnieje sposób, aby zrobić to podobne do tego:
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"
Powód chcę zrobić to w ten sposób jest uniknąć rejestracji każdej klasy zaimplementować z rejestratorem z autofac w kodzie. Chcę być w stanie zarejestrować wszystkie obiekty w xml i po prostu mieć LoggerModule, który dodaje tę rejestrację.
Z góry dziękuję!
Ja próbuje wdrożyć moduł, ale nie jestem znalezienie builder.Register() funkcji nierodzajową . – philt5252
Jest to metoda rozszerzenia, która istnieje w klasie 'Autofac.RegistrationExtensions'. Powinieneś zdecydowanie to mieć. –
haha ... nevermind ... Nie skończyłem pisania kodu i zapomniałem, że C# będzie implikować typ z Func. – philt5252