C# 在依赖项注入中为多个接口提供单个实现
我目前正在编写一个WPF应用程序,其中使用依赖项注入 它分为多个项目:C# 在依赖项注入中为多个接口提供单个实现,c#,wpf,dependency-injection,C#,Wpf,Dependency Injection,我目前正在编写一个WPF应用程序,其中使用依赖项注入 它分为多个项目: WPF应用程序本身 服务接口 上述服务的实施 其他与这个问题无关的东西 现在我有了一个泛型接口,泛型类型是从WPF应用程序传入的。它也是在WPF应用程序中定义的,而不是在其他项目可以访问的库中定义的,因此除了WPF应用程序之外,我不能在其他任何地方访问该类型 我希望能够以一种非通用的方式访问通用接口的服务,但是我该如何做呢 想象一下以下情况: 我的接口定义如下。一个是非泛型基础版本,泛型基础版本仅公开泛型类型的对象 publ
public interface IService
{
void DoStuff();
}
public interface IService<T> : IService
{
T GenericData { get; }
}
公共接口iSeries设备
{
void DoStuff();
}
公共接口iSeries设备:iSeries设备
{
T GenericData{get;}
}
我实现了如下所述的接口:
public class ServiceImplementation<T> : IService<T>
{
public T GenericData { get; }
public void DoStuff() { } // Some irrelevant implementation
}
公共类服务实现:iSeries设备
{
公共T GenericData{get;}
public void DoStuff(){}//一些不相关的实现
}
当我将该类型的对象注入WPF应用程序中定义的另一个服务时,我显然可以访问泛型实现,因为我知道泛型类型。但是,当我想访问另一个库中的服务,而我不知道该服务的泛型类型时,我想访问该服务的非泛型版本
如何确保在作为单例添加到ServiceCollection时为两个接口提供相同的对象
class WpfOnlyObject
{
// Irrelevant stuff
}
// In the App.xaml.cs
public void ConfigureServices(ServiceCollection services)
{
services.AddSingleton<IService<WpfOnlyObject>, ServiceImplementation<WpfOnlyObject>>();
services.AddSingleton<IService, ServiceImplementation<WpfOnlyObject>>();
}
类WpfOnlyObject
{
//无关的东西
}
//在App.xaml.cs中
公共void配置服务(ServiceCollection服务)
{
services.AddSingleton();
services.AddSingleton();
}
如果这个问题已经得到了回答,我真的很抱歉,但我在这里找不到合适的答案。根据建议,我做了以下操作,它工作得非常完美
// taken from the code in the question
public void ConfigureServices(ServiceCollection services)
{
services.AddSingleton<IService<WpfOnlyObject>, ServiceImplementation<WpfOnlyObject>>();
services.AddSingleton<IService>(serviceProvider => serviceProvider.GetRequiredService<IService<WpfOnlyObject>>());
}
//摘自问题中的代码
公共void配置服务(ServiceCollection服务)
{
services.AddSingleton();
services.AddSingleton(serviceProvider=>serviceProvider.GetRequiredService());
}
IServiceCollection
在这方面有点弱——您不太可能在ASP.NET之外看到它。我认为您可能必须注册IService
作为从容器中获取IService
的委托