使用Unity创建我的类中使用的单例

时间:2017-07-04 18:49:36

标签: c# dependency-injection unity-container

我有一个需要HttpClient类实例的类,我只想实例化一次,即Singleton

public interface IMyClass {}
public class MyClass : IMyClass {
    private HttpClient client;
    public MyClass(HttpClient client)
    {
        this.client = client;
    }
}


IUnityContainer container = new UnityContainer();
container.RegisterType<IMyClass, MyClass>();

var httpClient = new HttpClient();

如何将httpClient实例注册为我的MyClass的单身人士可以使用它?

1 个答案:

答案 0 :(得分:2)

你试过这个吗?

container.RegisterType<IMyClass, MyClass>(new ContainerControlledLifetimeManager());

https://msdn.microsoft.com/en-us/library/ff647854.aspx

由于您的类只有一个实例,因此其中只有一个HTTP客户端实例。

更新:

为了解决HttpClient依赖关系本身,请使用

container.RegisterType<HttpClient, HttpClient>(new ContainerControlledLifetimeManager(), new InjectionConstructor());

这样任何需要HttpClient的类都会收到相同的实例。我不确定参数的顺序,但基本上你必须告诉Unity 2的东西 - 将HttpClient注册为单例并使用它的默认构造函数。