通常、これは実装を含むモジュールで行います。Unityコンテナーは、モジュールのコンストラクターで依存性注入を使用して提供されます。したがって、シェルは実際に実装をインターフェイスに登録する必要はありません。インターフェイスを含むモジュールは通常、インフラストラクチャDLL(モジュールではない)であるため、実装モジュールから参照できます。
これは、DLL間のインターフェイス/実装の分離に関するPrismの推奨事項と一致していることに注意してください。彼らはサービスに関してある程度深く掘り下げます。モデルや他のオブジェクトにそれを使用している例が見つかるとは思えませんが。
例:
using Microsoft.Practices.Unity;
using YourInfrastructureDll;
public sealed class ModuleImplementationA : IModule
{
private readonly IUnityContainer _container;
public ModuleImplementationA(IUnityContainer container)
{
_container = container;
}
public void Initialize()
{
// IYourInterface is defined in the Infrastructure DLL, while YourImplementationA exists in this module
_container.RegisterType<IYourInterface, YourImplementationA>();
}
}
これは、別の実装DLLと交換できます。
using Microsoft.Practices.Unity;
using YourInfrastructureDll;
public sealed class ModuleImplementationB : IModule
{
private readonly IUnityContainer _container;
public ModuleImplementationB(IUnityContainer container)
{
_container = container;
}
public void Initialize()
{
// IYourInterface is defined in the Infrastructure DLL, while YourImplementationB exists in a different module than the first
_container.RegisterType<IYourInterface, YourImplementationB>();
}
}