AutofacIoCコンテナの問題を解決しようとしています。
私のWebアプリケーションには次の部分があります。
- ウェブアプリケーション
- コア(共有)ライブラリ。
- モジュール
各モジュールにはコアライブラリ(以下のコードを含む)への参照があり、各モジュールは独自のタイプを登録できる必要があります。したがって、アプリケーションとモジュールの間に1つの共有コンテナーが必要です。
私は次のコンテナのコードを持っています:
public static class DependencyContainer
{
public static IContainer Container { get; private set; }
public static ContainerBuilder Builder { get; private set; }
public static void RegisterType<TFrom, TTo>() where TTo : TFrom
{
Builder.RegisterType<TTo>().As<TFrom>();
}
public static T ResolveType<T>()
{
return Container.Resolve<T>();
}
public static void InitContainer()
{
Builder = new ContainerBuilder();
Container = Builder.Build();
}
}
このコンテナは、メイン(コア)ライブラリにあります。アプリケーションが起動すると、global.asaxからInitContainer()が呼び出されます。この後、RegisterType()メソッドを使用してアプリケーションモジュールから新しいタイプを登録しようとしています。
しかし、この後、私はどのタイプも解決できません。このタイプが登録されていないという例外をスローするだけです。
このコードの主なアイデアは、1つの共有コンテナーのみを使用して、任意のモジュールおよびWebアプリケーションから任意のタイプを解決できるようにすることです。
誰かがこの問題で私を助けることができますか?複数のライブラリ間で1つの共有IoCコンテナを使用するためのより洗練されたアーキテクチャソリューションはありますか?
前もって感謝します!