对单例类使用unity的Dependency Resolver

时间:2018-10-19 08:32:20

标签: c# asp.net-web-api dependency-injection singleton

我有一个ILogger接口,并且Logger类(单例)实现了ILogger接口。我想使用unity容器注册此依赖项。你能帮我一下吗?

public class Logger: ILogger
{
 private static readonly Lazy<Logger> instance = new Lazy<Logger>(()=> new Logger());
 public static Logger Instance{get{return instance.Value;}}
 private Logger(){}
 public void LogEvent(){}
}

1 个答案:

答案 0 :(得分:1)

首先,我看到您的代码无法编译。您错过的实例类型:

...
public static ILogger Instance {get{return instance.Value;}}
...

据我所知,您可以在启动类中尝试下一个:

var container = new UnityContainer();
var logger = Logger.Instance; 
container.RegisterInstance<ILogger>(logger, new ContainerControlledLifetimeManager());

container.Resolve<ILogger>返回您的实例并将ILogger注入构造函数中,您应该获取记录器实例 ContainerControlledLifetimeManager解析已注册类型的单例实例,其范围仅限于容器的生存期。

不要忘记将UnityContainer设置为项目中的默认依赖项解析器。