我不熟悉StructureMap,但使用Unity Application Block(通常稱爲Unity),您可以使用單一接口註冊更多具體類型(服務)。您爲這些服務指定名稱,並在解析時收到註冊服務列表。然後您可以根據用戶設置選擇一個。
這是一個例子,如何使用配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity>
<containers>
<container>
<types>
<type name="OutputService1" type="InterfacesLibrary.IOutputService, InterfacesLibrary" mapTo="InputOutputLibrary.ConsoleOutputService, InputOutputLibrary" />
<type name="OutputService2" type="InterfacesLibrary.IOutputService, InterfacesLibrary" mapTo="InputOutputLibrary.MsgBoxOutputService, InputOutputLibrary" />
</types>
</container>
</containers>
</unity>
</configuration>
註冊命名服務,或者你可以從代碼
container.RegisterType<IOutputService, ConsoleOutputService>("OutputService1");
container.RegisterType<IOutputService, MsgBoxOutputService>("OutputService2");
做同樣的事情在決議的時候,你解決一個或其他類型根據用戶要求
IOutputService outputService;
if (user.LikesConsole == true)
outputService = container.Resolve<IOutputService>("OutputService1");
else
outputService = container.Resolve<IOutputService>("OutputService2");
看看系列視頻o PRISM。 second video是Unity的介紹。
請給出一個線索,小例子。如果我理解你的建議,我會更多地瞭解它 – Vlad
我在上面的答案中添加了示例。 – Tomas00