Commonのクラスはすべてのアプリケーションで同じ方法で登録されていると言われているので、Commonのすべてのクラスに対してプログラム登録を作成します。 Unityは、宣言的な設定とプログラム的なミキシングを可能にします。したがって、Common.dllコンポーネントはプログラムによって登録され、アプリケーション固有の登録(変更される可能性があります)はXML設定を使用して実行できます。
Common.dllの開発者に登録を作成する負担がかかります。なぜなら、クラスの登録方法を知っており、一度だけ(すべてのアプリケーションではなく)行う必要があるからです。更新があると、すべてのアプリケーションがコードを変更することなく登録変更を受け取ります。
Common.dllがUnityに直接依存しないようにするため、Common.Ioc.Unity.dll
などの登録用に別のアセンブリを作成し、Common.dllの登録をブートストラップする方法があります。例えば
さまざまなコンテナをサポートするために、さまざまな種類の登録を提供することもできます(必要な場合)。
欠点は、アプリケーションによっても参照される小さなアセンブリだということです。 Common.dllに類似したアセンブリが多数ある場合は、すべての共有登録を1つのアセンブリにまとめることについて考えるのは理にかなっています。
上記の別の(文体の)バリエーションは、コンテナ拡張を使用して登録を実装することです。たとえば、次のように
public class CommonContainerExtension : UnityContainerExtension
{
protected override void Initialize()
{
Container.RegisterType<Common.Logger>(new ContainerControlledLifetimeManager());
}
}
次に、アプリケーションで使用して登録することができ:
var container = new UnityContainer();
// Register Common.dll using container extension or RegistrationManager
container.AddNewExtension<CommonContainerExtension>();
// Register XML configuration for application
// Application can even overwrite Common.dll registrations from above if required
container.LoadConfiguration();
各プロジェクトは、異なる方法でCommon.dllタイプを登録する必要がありますまたは登録が異なるプロジェクト間で一致しているしていますか? –
一貫して、新しいクラスをCommonに追加し、そのクラスの登録を追加する必要があるとします。これは簡単ですが、アプリケーションを参照するたびに複数回実行する必要があります。 – forevermetal02