Autofac передает параметр вложенным типам

Я использую Autofac в качестве IoC в моей службе WCF. У меня есть ситуация, когда я хочу передать объект вложенному типу (т.е. типу, который не разрешается напрямую, но при разрешении другого типа). Насколько я понял, передача этого объекта в качестве параметра конструктора является предпочтительным способом в Autofac. Вот пример такой ситуации.

Вложенный тип:

public class EventLogger<T> : IEventLogger<T>
{
    public EventLogger(IRepository<T> repository, User currentUser) { ... }  
}

Тип, который я на самом деле пытаюсь разрешить:

public class SomeBusinessObject  
{  
    public SomeBusinessObject(IEventLogger<SomeLogEventType> logger, ...) { ... }  
}

Регистрация:

var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterGeneric(typeof(EventLogger<>)).As(typeof(IEventLogger<>));
builder.RegisterType<SomeBusinessObject>();

Разрешение внутри моей операции службы WCF:

var currentUser = GetUserFromServiceContext();  
var bo = lifetimeScope.Resolve<SomeBusinessObject>();

Как и где мне передать текущего пользователя моему регистратору? Должен ли я предполагать, что операция WCF должна знать, что для разрешения SomeBusinessObject требуется сначала разрешить IEventLogger и передать разрешенный экземпляр при разрешении SomeBusinessObject? Примерно так (простите, если это не сработает, это всего лишь идея):

var currentUser = GetUserFromServiceContext();  
var logger = lifetimeScope.Resolve<IEventLogger<SomeLogEventType>>(new NamedParameter("currentUser", currentUser));  
var bo = lifetimeScope.Resolve<SomeBusinessObject>(new NamedParameter("logger", logger));

Если это решение, что произойдет, если тип вложен глубже? Не Что, по крайней мере, частично нарушает цель внедрения зависимостей?

7
задан Jason Down 17 November 2011 в 20:24
поделиться