C# 使用unity在singleton类中注入接口依赖项
我正在使用C# 使用unity在singleton类中注入接口依赖项,c#,unity-container,C#,Unity Container,我正在使用Unity进行依赖项注入到目前为止,除了在单例类中使用依赖项外,它工作得很好 我有一个静态类来访问数据库函数 public class DB { private static readonly Lazy<DB> lazy = new Lazy<DB>(() => new DB()); public static DB Instance { get { return lazy.Value; } } p
Unity
进行依赖项注入
到目前为止,除了在单例类中使用依赖项外,它工作得很好
我有一个静态类来访问数据库函数
public class DB
{
private static readonly Lazy<DB> lazy = new Lazy<DB>(() => new DB());
public static DB Instance { get { return lazy.Value; } }
private readonly IContactService _contactService;
private DB() { }
public DB(IContactService contactService)
{
_contactService = contactService;
}
}
将您的DB类更改为:
public class DB {
private readonly IContactService _contactService;
public DB(IContactService contactService) {
_contactService = contactService;
}
...
}
无论您在哪里使用DB.Instance
,都要将DB作为依赖项注入并使用它。或者使用Locator.Instance.Resolve()
,尽管使用ServiceLocator被视为反模式(取决于具体情况)
由于您要在DI容器中将DB注册为singleton,因此容器有责任始终返回注入的相同实例。您不需要在DB中编写代码就可以使其成为单例。您是否也注册了
IContactService
?您是否注册了ContactService
?请向我们展示IContactService
的构造函数。是的,它注册为`\u container.RegisterType();`由于其他类也在使用相同的方法,您是如何获得DB
的实例的?如果您使用的是实例
属性,那么这将不起作用。那么您的DB
类就没有使用DI。而是像对IContactService
一样注入它,并从类中删除静态成员。
public class DB {
private readonly IContactService _contactService;
public DB(IContactService contactService) {
_contactService = contactService;
}
...
}