通常、実装を含むモジュールでこれを行います。 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>();
}
}
あなたは離れてその機能を分割して例のモデルを提供することができますか? – Jon
アプリケーションは、スクリプト化されたUI自動化のためのプレーヤーとして機能することです。私は、私たちが自動化したいUI項目用のインターフェースと、自動化を実装する別のプロジェクトを含んでいるプロジェクトを持っています。基本設定は次のとおりです:Scripting.ComponentModel - Scripting - UIAutomation.ComponentModel - UIAutomation - Etc. 私はプリズムモジュールを考慮しましたが、それらはUI Compositionのためのものとして私を襲います。私はサービスレイヤーを州と抽象的ないくつかの詳細を提供すると考えていましたが、多くの場合、複雑さを増すだけで多くの価値を追加することはありません。 – Mike