2017-07-04 21 views
0

我有需要的HttpClient类的一个实例,我想只有一次实例化即辛格尔顿使用Unity来创建一个在我的课使用的单

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可以使用它吗?

+0

为什么你想要一个HttpClient实例? – Itsik

+1

@Itsik 很可能是因为HTTP客户端被设计为用作单例。我个人不建议使用它每个请求。 –

回答

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注册为单例并使用其默认构造函数。

+0

我想在其他类中使用HttpClient,而不仅仅是在MyClass中。 –

+0

我没有看到你在任何地方注册HttpClient类?这将如何工作? –

+0

你想让它成为所有类的单例还是每个类的单独实例? –

相关问题