C# 使用unity的singleton类依赖解析程序

C# 使用unity的singleton类依赖解析程序,c#,asp.net-web-api,dependency-injection,singleton,C#,Asp.net Web Api,Dependency Injection,Singleton,我有一个ILogger接口和Logger类,它是singleton实现的ILogger接口。我想使用unity容器注册这个依赖项。你能帮帮我吗 public class Logger: ILogger { private static readonly Lazy<Logger> instance = new Lazy<Logger>(()=> new Logger()); public static Logger Instance{get{return inst

我有一个ILogger接口和Logger类,它是singleton实现的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(){}
}

首先我看到你的代码不可编译。您缺少的实例类型:

...
public static ILogger Instance {get{return instance.Value;}}
...
我理解您的意图,请在创业课程中尝试下一步:

var container = new UnityContainer();
var logger = Logger.Instance; 
container.RegisterInstance<ILogger>(logger, new ContainerControlledLifetimeManager());
Resolve返回您的实例并将ILogger注入构造函数中,您应该得到您的logger实例 ContainerControlled LifetimeManager解析作用域为容器生存期的已注册类型的单例实例


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

谢谢@luriiMaksimov。例如,我错过了返回类型。实例是通过日志记录器一次性创建的。“我还需要添加ContainerControlledLifetimeManager吗?”Gautamayak说,“是的。”。这是需要的。这是unity的指令,以确保实例安全,并在再次调用RegisterInstance之前保护实例不受运行时更改的影响。我很确定创作者在幕后有一些想法来实现这一点。@Gautamayak很高兴能帮助你。请把我的答案记为正确答案。让它变成绿色:。根据注册方式->您应该有如下内容:HttpConfiguration config=GlobalConfiguration.Configuration;var容器=新的UnityContainer;/*您的注册*/config.dependencysolver=newunityresolvercontainer;对于config.Filters,只需重用Logger.Instance即可。但这取决于你如何构建一个app@thegautamnayak好的,那么它不是一个过滤器,而是一个消息句柄。是的,你能做到。这是一种可能的方法。检查这张有答案,非常感谢。这真的帮了我很多忙: