gpt4 book ai didi

c# - MvvmLight SimpleIoc 及多个具体实现

转载 作者:太空狗 更新时间:2023-10-30 01:20:24 25 4
gpt4 key购买 nike

使用 SimpleIoc 我想注册 IProvider 的多个实现,例如:

SimpleIoc.Default.Register<IProvider, Provider1>();
SimpleIoc.Default.Register<IProvider, Provider2>();

所以我可以这样做:

var providers = SimpleIoc.GetAllInstances<IProvider>();

有没有办法做这样的事情?如果我按原样尝试,我会发现已经为 IProvider 注册了一个类。

最佳答案

您可以通过实现基类并使用键控注册来实现:

public interface IProvider { }
public abstract class BaseProvider : IProvider { }
public class Provider1 : BaseProvider { }
public class Provider2 : BaseProvider { }

[Test]
public void RegisterTwoImplementations_GetAllInstances_ReturnsBothInstances()
{
SimpleIoc.Default.Register<Provider1>();
SimpleIoc.Default.Register<Provider2>();

SimpleIoc.Default.Register<BaseProvider>(() =>
SimpleIoc.Default.GetInstance<Provider1>(), "a" );

SimpleIoc.Default.Register<BaseProvider>(() =>
SimpleIoc.Default.GetInstance<Provider2>(), "b");

var result = SimpleIoc.Default.GetAllInstances<BaseProvider>();

Assert.That(result, Is.Not.Null);
Assert.That(result.Count(), Is.EqualTo(2));
Assert.That(result.Any(x => x.GetType() == typeof(Provider1)), Is.True);
Assert.That(result.Any(x => x.GetType() == typeof(Provider2)), Is.True);
}

关于c# - MvvmLight SimpleIoc 及多个具体实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19301891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com