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

C# 使用Unity创建我的类中使用的单例,c#,dependency-injection,unity-container,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 =

我有一个类需要一个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();
公共接口IMyClass{}
公共类MyClass:IMyClass{
私有HttpClient;
公共MyClass(HttpClient客户端)
{
this.client=client;
}
}
IUnityContainer容器=新的UnityContainer();
container.RegisterType();
var httpClient=新的httpClient();
如何将httpClient实例注册为我的
MyClass
的单例,以便使用它?

您尝试过吗

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

因为类只有一个实例,所以类中也只有一个HTTP客户端实例

更新:

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

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

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

我也想在其他类中使用HttpClient,而不仅仅是在MyClass中。我没有看到你在任何地方注册HttpClient类?这将如何工作?您希望所有类都是单例的还是每个类都有一个单独的实例?所有需要HttpClient的类都是单例的。这是因为Unity试图为您创建HttpMessageHandler。您可以使用RegisterType中的new InjectionConstructor()直接指定构造函数以使用无参数的构造函数。为什么要使用HttpClient的单个实例?@Itsik很可能是因为HTTP client被设计为用作单实例。我个人不建议每个请求都使用它。