【发布时间】:2011-08-10 03:36:29
【问题描述】:
我在 WCF 服务中使用 Autofac 作为我的 IoC。我有一种情况,我想将一个对象传递给一个嵌套类型(即一种不直接解析的类型,但是在解析另一种类型时)。据我了解,将此对象作为构造函数参数传递是 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));
如果这是解决方案,如果类型嵌套更深会发生什么?这是否至少破坏了依赖注入的某些目的?
【问题讨论】:
标签: c# ioc-container autofac