C# 统一:有几个实现,并决定使用哪一个

C# 统一:有几个实现,并决定使用哪一个,c#,wpf,unity-container,prism,C#,Wpf,Unity Container,Prism,我很快就要开始一个WPF应用程序了,我们决定使用PRISM+Unity来帮助我们进行一点架构设计 我有个问题。我们将有一个DataRepository,它实现了一个IDataRepository 问题是,在那之后,我们还将拥有一个离线数据存储库,它实现相同的接口 我们希望能够根据应用程序的状态(在线/离线)给出一些返回实现的逻辑 我怎样才能用Prism+Unity实现这一点呢?你可以用一个简单的方法来完成你所追求的目标。每次需要实例化IDataRepository时,都会执行此操作 contai

我很快就要开始一个WPF应用程序了,我们决定使用PRISM+Unity来帮助我们进行一点架构设计

我有个问题。我们将有一个
DataRepository
,它实现了一个
IDataRepository

问题是,在那之后,我们还将拥有一个
离线数据存储库
,它实现相同的接口

我们希望能够根据应用程序的状态(在线/离线)给出一些返回实现的逻辑

我怎样才能用Prism+Unity实现这一点呢?

你可以用一个简单的方法来完成你所追求的目标。每次需要实例化IDataRepository时,都会执行此操作

container.RegisterType<IDataRepository, DataRepository>("Online");
container.RegisterType<IDataRepository, OfflineDataRepository>("Offline");
container.RegisterType<IDataRepository>(new InjectionFactory(c => { 
    var connectivityStatus = /*TODO: logic to determine if online*/
        ? "Online"
        : "Offline";
    return c.Resolve<IDataRepository>(connectivityStatus);            
});
container.RegisterType(“联机”);
container.RegisterType(“脱机”);
RegisterType(新注入工厂(c=>{
var connectivityStatus=/*TODO:确定是否联机的逻辑*/
?“在线”
:“离线”;
返回c.Resolve(connectivityStatus);
});

Ok,这是我们在何时请求实例时计算的?是的,每次解析实例时都会运行指定给InjectionFactory构造函数的委托。