2

我的问题很简单。我必须通过接口和具体类型注册所有实现。

container.RegisterAutoWiredAs<AuthenticationManager, IAuthenticationManager>();
container.RegisterAutoWired<AuthenticationManager>();

我正在使用默认的单例生命周期。我想确保它们解析为相同的实例,但我的测试显示我最终得到了两个实例。

if (!ReferenceEquals(container.Resolve<IAuthenticationManager>(),
                     container.Resolve<AuthenticationManager>()))
{
    throw new ApplicationException("multiple instances");
}

有没有办法在这里使用单个实例?

4

1 回答 1

4

注册两次会为每种类型创建一个新实例,一个用于接口,一个用于具体类型。

如果您想要相同的单例实例,您将首先注册一个自动装配的实例,然后针对解析同一实例的其他类型进行注册,例如:

container.RegisterAutoWiredAs<AuthenticationManager, IAuthenticationManager>();

并且要么

container.Register(c => (AuthenticationManager)c.Resolve<IAuthenticationManager>());

或者

var instance = (AuthenticationManager)container.Resolve<IAuthenticationManager>();
container.Register(instance);
于 2013-03-22T00:11:57.483 回答