Skip to content

Instantly share code, notes, and snippets.

@wshirey
Last active December 17, 2015 21:00
Show Gist options
  • Save wshirey/068eafee7621253641d0 to your computer and use it in GitHub Desktop.
Save wshirey/068eafee7621253641d0 to your computer and use it in GitHub Desktop.
how to use factory and strategy pattern with structure map
// plugin definitions
interface IPlugin
{
string ClientID;
void SomeClientSpecificFunction();
}
class DefaultPlugin : IPlugin
{
IDefaultPlugin()
{
ClientID = "";
}
void SomeClientSpecificFunction()
{
}
}
class ConcretePlugin : IPlugin
{
ConcretePlugin()
{
ClientID = "ACME";
}
void SomeClientSpecificFunction()
{
// client specific code
}
}
// factory definitions
interface IPluginFactory
{
IPlugin GetPlugin(string clientId);
}
public class PluginFactory : IPluginFactory
private IEnumerable<IPlugin> plugins;
ctor(IEnumerable<IPlugin> plugins)
{
this.plugins = plugins;
}
public IPlugin GetPlugin(string clientId)
{
var result =
this.plugins.where(p => p.ClientId == clientId);
if (result == null)
return new DefaultPlugin();
}
}
// dependent code
public class TestHarness
{
IPluginFactory pluginFactory;
public TestHarness(IPluginFactory pluginFactory)
{
this.pluginFactory = pluginFactory;
}
public void Execute(string client = "")
{
var plugin = PluginFactory.GetPlugin(client);
plugin.SomeClientSpecificFunction();
}
}
Scan(s =>
{
s.TheCallingAssembly();
s.AddAllTypesOf<IPlugin>();
s.AddAllTypesOf<IPluginFactory>();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment