システム依存の EFcontexts とサービスを実装するプラグイン アセンブリを含む asp.net mvc 3 Web アプリケーションがあります。
たとえば、一般的に次のようなアセンブリがあります。
System1Controller : IController // from System.Web.Mvc
ISystem1Service {
IList<System1Type> GetOperation(string something);
}
System1Service : ISystem1Service
{
private ISystem1Entities context;
public System1Service(ISystem1Entities context)
{
this.context = context;
}
}
ISystem1Entities
{
IDbSet<System1Type> Operations { get; set; }
}
System1Entities : DbContext, ISystem1Entities
Unity Bootstrapper を使用して Bootstrapper.Initialize() を呼び出すと、次の BuildUnityContainer() 実装で動作します
private static IUnityContainer BuildUnityContainer()
{
var theContainer = new UnityContainer();
var connectionString = ConfigurationManager.ConnectionStrings["WebAppConnectionString"];
if (connectionString == null)
{
throw new ApplicationException("The ConnectionString is not defined.");
}
// register all your components with the container here
// it is NOT necessary to register your controllers
theContainer.RegisterType<ISystem1Entities, System1Entities>(
new HierarchicalLifetimeManager(),
new InjectionConstructor(connectionString.ConnectionString));
theContainer.RegisterType<ISystem1Service, System1Service>();
var factory = new UnityControllerFactory(theContainer);
ControllerBuilder.Current.SetControllerFactory(factory);
return theContainer;
}
コンパイル時に「不明な」アセンブリをロードし、それらに含まれる型を登録し、Web アプリケーションが必要に応じてコントローラー、サービス、コンテキストを参照できるように、ブートストラップをリファクタリングしたいと考えています。
Unity AutoRegistraionプロジェクトを見てきましたが、私が望む実装の近くにいるように見えますが、次のアイデアを実装する方法がわかりません:
BootStrapper.BuildUnityConfiguration
Initialize Container
RegisterMyAssemblies()
「RegisterMyAssemblies」プロセスでアセンブリのワイルドカード リストを登録してから、個々のアセンブリ内の型の登録に進みます。助言がありますか?