Unity MVCパッケージをアンインストール/再インストールしても、問題は解決しませんでした。プロジェクトにMicrosoft.EnterpriseLibrary.Commonライブラリへのハードリファレンスを配置する必要があり、それで1〜2週間はクリアされたようです。その後、エラーが断続的に再発するのを確認し始めました。完全なソリューションをクリーンアップしてビルドすると、たまに問題が解決しました。それは機能し、その後突然エラーメッセージに戻ります。
それで、私はついに今朝Unity.Mvcをあきらめ、代わりにAutofacを実装しました。Autofac用にブートストラッパーファイルを設定すると、最初のコンパイルで動作し、午前中は安定しています。
誰かがサンプルを必要とする場合に備えて、Autofacのブーストラッパーファイルを次に示します。注:Global.asax.vbファイルに大量のコードを配置する代わりに、WebActivatorを使用して、すべてのブートスラップクラスを起動前に実行します。
#Region "Imports"
Imports System.Reflection
Imports Autofac
Imports Autofac.Integration.Mvc
Imports MyCompany.Data.Repositories
Imports MyCompany.Services
Imports MyCompany.Web.Mvc.Public.Bootstrap
Imports MyCompany.Web.Mvc.Public.Services
#End Region
#Region "Assembly Meta"
' This tells the app to run the "Start" method prior to running the App_Start method in Global.asax
<Assembly: WebActivator.PreApplicationStartMethod(GetType(AutofacDI), "Initialize")>
#End Region
Namespace MyCompany.Web.Mvc.Public.Bootstrap
''' <summary>
''' Class to setup dependency injection and register types/services.
''' </summary>
''' <remarks></remarks>
Public NotInheritable Class AutofacDI
''' <summary>
''' Method to register the Unity dependency injection component.
''' </summary>
''' <remarks>
''' This line of code below could alternatively be placed in Global.asax App_Start(), doing
''' so in this manner ensures that this gets run "PreStart".
''' </remarks>
Public Shared Sub Initialize()
' Create Unity dependency container.
Dim dependencyContainer = BuildIocContainer()
' Set DI resolver
DependencyResolver.SetResolver(New AutofacDependencyResolver(dependencyContainer))
End Sub
''' <summary>
''' Registers the IOC types/services.
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Shared Function BuildIocContainer() As Autofac.IContainer
Dim builder = New ContainerBuilder
With builder
' Register Controllers
.RegisterControllers(Assembly.GetExecutingAssembly())
' Custom MyCompany/Mvc objects
.RegisterType(Of FormsAuthenticationService)().As(Of IFormsAuthenticationService)().InstancePerHttpRequest()
.RegisterType(Of AccountMembershipService)().As(Of IMembershipService)().InstancePerHttpRequest()
'***************************************************************
'* MyCompany service objects.
'***************************************************************
' This is auto registration, it replaces all the individual registration lines of code below.
builder.RegisterAssemblyTypes(GetType(CatalogCodeService).Assembly).
Where(Function(t) t.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerHttpRequest()
'***************************************************************
'* MyCompany repository objects (used by service objects above)
'***************************************************************
' This is auto registration, it replaces all the individual registration lines of code below.
builder.RegisterAssemblyTypes(GetType(CatalogCodeRepository).Assembly).
Where(Function(t) t.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerHttpRequest()
End With
Return builder.Build()
End Function
End Class
End Namespace