【问题标题】:Unity: Have several implementation and decide which one to useUnity:有几个实现并决定使用哪一个
【发布时间】:2015-08-28 10:21:53
【问题描述】:

我必须尽快启动一个 WPF 应用程序,我们决定使用 PRISM + Unity 来帮助我们一点点架构。

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

问题是我们之后还会有一个OfflineDataRepository,它实现了相同的接口。

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

如何使用 Prism+Unity 实现这一目标?

【问题讨论】:

    标签: c# wpf unity-container prism


    【解决方案1】:

    您可以使用InjectionFactory 来完成您的目标。每次需要实例化 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);            
    });
    

    【讨论】:

    • 好的,这会在我们请求实例的时间进行评估?
    • 是的,每次解析实例时都会运行为 InjectionFactory 的构造函数指定的委托。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2013-05-26
    相关资源
    最近更新 更多