c# – MvvmLight SimpleIoc和多个具体实现
作者:互联网
使用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,ioc-container,mvvm-light 来源: https://codeday.me/bug/20190624/1281952.html