次のエラーが表示されます。
Test method: BootStrapperTest.Can_Create_Alert_Management_Object threw exception: Ninject.ActivationException:
Error activating IAlertManagement No matching bindings are available, and the type is not self-bindable.
Activation path:
1) Request for IAlertManagement
Suggestions:
1) Ensure that you have defined a binding for IAlertManagement.
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
3) Ensure you have not accidentally created more than one kernel.
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.
5) If you are using automatic module loading, ensure the search path and filters are correct.
この例外の原因となっているテスト ケースは次のとおりです。
[TestInitialize]
public void Initialize()
{
BootStrapper.RegisterTypes();
}
[TestMethod]
public void Can_Create_Alert_Management_Object()
{
IAlertManagement alertManagementService = BootStrapper.Kernel.Get<IAlertManagement>();
Assert.IsNotNull(alertManagementService);
}
//This is the code that gets called in [TestInitialize]
public static void RegisterTypes()
{
if (!initialized)
{
Kernel.Bind(scanner => scanner.FromAssembliesMatching("MyCompany.MyProduct.*")
.SelectAllClasses()
.BindDefaultInterface());
Kernel.Unbind(typeof(IWcfServiceClient<>));
Kernel.Bind(typeof(IWcfServiceClient<>)).ToMethod(ctx =>
(ctx.Kernel.Get(typeof(WcfServiceClientProvider<>).MakeGenericType(ctx.GenericArguments)) as IProvider).Create(ctx));
}
initialized = true;
}
上記のエラーは、ビルド サーバーのユニット テストの 1 つで発生していますが、開発マシンでは発生していません。このテストとほぼ同じテストが他に 7 つあり、ビルド サーバーと開発マシンで成功しましたが、失敗したテストはこれだけです。
IAlertManagement インターフェイスはCoreという dll から来ており、具象型はAlertManagementという別の dll から来ています。Core dll とAlertManagement dll の両方を単体テストプロジェクトにプロジェクト参照として含めています。この状況と同じテストを他に 7 つか 8 つ持っていますが、失敗したのはこれだけです。
どんなアイデアでも大歓迎です。