servicestack,funq,Dependency Injection,servicestack,Funq" /> servicestack,funq,Dependency Injection,servicestack,Funq" />

Dependency injection 使用RegisterAutoWired和RegisterAutoWiredAs注册相同的具体类

Dependency injection 使用RegisterAutoWired和RegisterAutoWiredAs注册相同的具体类,dependency-injection,servicestack,funq,Dependency Injection,servicestack,Funq,我的问题很简单。我必须按接口和具体类型注册所有实现 container.RegisterAutoWiredAs<AuthenticationManager, IAuthenticationManager>(); container.RegisterAutoWired<AuthenticationManager>(); 我使用默认的单例生命周期。我想确保它们解析为同一个实例,但我的测试显示我最终得到了两个实例 if (!ReferenceEquals(container.

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

container.RegisterAutoWiredAs<AuthenticationManager, IAuthenticationManager>();
container.RegisterAutoWired<AuthenticationManager>();
我使用默认的单例生命周期。我想确保它们解析为同一个实例,但我的测试显示我最终得到了两个实例

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

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

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

如果您想要相同的单例实例,您将首先注册一个自动连线实例,然后只注册另一个类型来解析相同的实例,例如:

container.RegisterAutoWiredAs<AuthenticationManager, IAuthenticationManager>();
或者

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


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

如果您想要相同的单例实例,您将首先注册一个自动连线实例,然后只注册另一个类型来解析相同的实例,例如:

container.RegisterAutoWiredAs<AuthenticationManager, IAuthenticationManager>();
或者

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