IPluginSelector interface
The IPluginSelector interface can be implemented to select a particular implementation of a plugin (out of several implementations) based on the business scenario.
For example, there might be two sites, one for Business to Consumer (B2C) and another for Business to Business (B2B). For B2C the default implementation of a particular plugin is sufficient, however, for B2B it needs to be modified. In this scenario, there will be two concrete implementations of the given plugin, and the implementation to use depends on the business case, whether the website is B2B or B2C.
Plugin class attribute
The first step to create two different concrete implementations of the same plugin is to decorate the plugin with the Plugin class attribute. All the default plugins in Litium have this attribute set to Default. If an implementation does not have this attribute, it gets a lower priority than an implementation with the attribute set to Default, and will probably not be used.
If you want to have different concrete implementations of the same plugin, implement the IPluginSelector interface.
The GetPluginName<T>() method should return the Plugin class attribute set for the custom concrete implementation.

IPluginSelector implementation
In the concrete implementation of IPluginSelector, return the same name as specified in the Plugin attribute shown above to execute that concrete implementation of the plugin.
Example:
In the case of Litium accelerators, the website has a settings page which has a property called AcceleratorType (the value for AcceleratorType can be B2B, B2C etc.), and based on the website the correct plugin is selected. If the settings page is not found, it returns Default so that the default plugin takes effect.

The StateTransitions plugin can have only one concrete implementation
Note that the plugin selector will not work correctly in the above case if the plugin is invoked from the Litium back office, since it depends on the current website, and there is no current website in back office.
For this reason, you should not override the StateTransitions plugin with the above method. There should be only one implementation of the StateTransitions plugin, but the implementation can have customised sections based on the website.