我工作的一個項目,以實現DI(使用Ninject)到現有的WinForms應用程序,但我已經打了幾個問題,我在的WinForms與DI工作的知識是有限的,充其量,不過我已經在MVC項目中多次成功使用過它。Ninject ActivationException在WinForms應用程序
我在嘗試創建一個具有需要的存儲庫的接口中的構造形式,當這條消息:
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
我已經在網上搜索,但大部分文章我已閱讀本錯誤要麼處理更復雜的設置,要麼與參數注入有關,我不確定這是否是問題。
我有一個形式,是發動那就是使用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();
}
這就是我用Ninject在MVC項目之前,我還沒有問題,但是顯然是有關於WinForms的不同的東西。
任何幫助將不勝感激。
非常感謝您回答我的兩個Ninject相關的問題!我有一種感覺,另一種感覺很快就會出現! – XN16
有很多關於DI話題良好的和複雜的問題,隨便問任何的)乾杯 –
的這裏是我的下一個問題,如果你想嘗試,再幫我出去!謝謝! http://stackoverflow.com/questions/14164443/ninject-dynamic-multiple-constructor-arguments – XN16