既存の WinForms アプリケーションに DI (Ninject を使用) を実装するプロジェクトに取り組んでいます。プロジェクト。
リポジトリのインターフェイスを必要とするコンストラクタを持つフォームを作成しようとすると、次のメッセージが表示されます。
Error activating IProductionRepository
No matching bindings are available, and the type is not self-bindable.
Activation path:
2) Injection of dependency IProductionRepository into parameter
productionRepository of constructor of type Main
1) Request for Main
Web で検索しましたが、このエラーについて読んだ記事のほとんどは、はるかに複雑な設定を扱っているか、パラメーターの挿入に関するものであり、ここでの問題かどうかはわかりません。
DI を使用するフォームを起動するフォームがあります (呼び出し時にエラーが発生しkernel.Get
ます:
Private Sub txt_Click(sender As System.Object, e As System.EventArgs) Handles txt.Click
Try
Dim kernel As Ninject.IKernel =
New Ninject.StandardKernel(New NinjectFactory())
Dim form As Main = kernel.Get(Of Main)()
form.ConnectionString = App.pstrConnectString
form.ShowDialog(Me)
Catch ex As Exception
Support.ErrorHandler.ReportError(ex.Message, ex, True)
End Try
End Sub
私は NinjectFactory に正しいバインディング (および他のいくつかのコメントアウトされた試み) を持っています:
public class NinjectFactory : NinjectModule
{
private IKernel _ninjectKernel;
public NinjectFactory()
{
_ninjectKernel = new StandardKernel();
}
public override void Load()
{
//_ninjectKernel.Bind(typeof(IRepository<>))
// .To(typeof(GenericRepository<>));
//_ninjectKernel.Bind(typeof(IProductionRepository))
// .To(typeof(ProductionRepository));
_ninjectKernel.Bind<IProductionRepository>().To<ProductionRepository>();
}
}
最後に、起動しようとしているフォームがあります。
private IProductionRepository _productionRepository;
public string ConnectionString
{
get
{
return _connectionString;
}
set
{
_connectionString = value;
}
[Inject]
public Main(IProductionRepository productionRepository) : this()
{
this._productionRepository = productionRepository;
}
public Main()
{
InitializeComponent();
}
これは、以前に MVC プロジェクトで Ninject を使用した方法であり、問題はありませんでしたが、WinForms に関しては明らかに何かが異なります。
どんな助けでも大歓迎です。