void SampleHostCanResolvePlugin3ButNot1And2()
    {
        var bar     = new Bar();
        var plugins = Assembly.GetAssembly(typeof(SampleHost))
                      .GetTypes()
                      .Where(t => t.IsClass && typeof(IPlugin).IsAssignableFrom(t))
                      .ToArray();
        var sut = new SampleHost(bar, plugins);

        sut.IsPluginSupported(typeof(Plugin1)).ShouldBeFalse();
        sut.IsPluginSupported(typeof(Plugin2)).ShouldBeFalse();
        sut.IsPluginSupported(typeof(Plugin3)).ShouldBeTrue();
    }
    void ResolvePlugin3()
    {
        var bar     = new Bar();
        var plugins = Assembly.GetAssembly(typeof(SampleHost))
                      .GetTypes()
                      .Where(t => t.IsClass && typeof(IPlugin).IsAssignableFrom(t))
                      .ToArray();
        var sut = new SampleHost(bar, plugins);

        sut.IsPluginSupported(typeof(Plugin3)).ShouldBeTrue();
        sut.CreateAndInvokePlugin(typeof(Plugin3));
        // no exception => succeeded
    }