使用 ninject 将存储库注入 winform 错误
Using ninject to inject repository to winform error
我正在使用 Ninject 将我的存储库注入我的 windows 表单。
所以我从 nuget 安装 ninject。我将其添加到我的 window 表单中:
public class Binding: NinjectModule
{
public override void Load()
{
Bind<IUserRepository>().To<IUserRepository>();
}
}
在我的表单中,我这样做了:
public partial class Form1 : Form
{
private IUserRepository userRepository;
[Inject]
public Form1()
{
InitializeComponent();
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
userRepository = kernel.Get<IUserRepository>();
}
private void Form1_Load(object sender, EventArgs e)
{
List<User> saaa = userRepository.Get().ToList();
int aaa = saaa.Count;
}
}
但是我得到这个错误:
An unhandled exception of type 'Ninject.ActivationException' occurred in Ninject.dll
Additional information: Error activating IUserRepository using binding from IUserRepository to IUserRepository
No constructor was available to create an instance of the implementation type.
Activation path:
1) Request for IUserRepository
Suggestions:
1) Ensure that the implementation type has a public constructor.
2) If you have implemented the Singleton pattern, use a binding with InSingletonScope() instead.
Bind<IUserRepository>().To<IUserRepository>();
这一行至少是部分问题;您没有告诉 Ninject 要使用 具体 IUserRepository
的实现。
它实际上就在错误消息中(强调我的)
Additional information: Error activating IUserRepository using binding from IUserRepository to IUserRepository
由于您无法创建接口的实例,因此您至少需要有一个 IUserRepository
的实现(例如 UserRepository
)并将其绑定到接口:
Bind<IUserRepository>().To<UserRepository>();
此外,[Inject]
属性在这种情况下毫无意义,因为您没有注入任何东西 - 您是直接从容器中自己创建依赖项(这没关系,尽管您可以进行适当的注入,请参阅 here 了解一些想法,这些想法也适用于 Ninject)
我正在使用 Ninject 将我的存储库注入我的 windows 表单。
所以我从 nuget 安装 ninject。我将其添加到我的 window 表单中:
public class Binding: NinjectModule
{
public override void Load()
{
Bind<IUserRepository>().To<IUserRepository>();
}
}
在我的表单中,我这样做了:
public partial class Form1 : Form
{
private IUserRepository userRepository;
[Inject]
public Form1()
{
InitializeComponent();
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
userRepository = kernel.Get<IUserRepository>();
}
private void Form1_Load(object sender, EventArgs e)
{
List<User> saaa = userRepository.Get().ToList();
int aaa = saaa.Count;
}
}
但是我得到这个错误:
An unhandled exception of type 'Ninject.ActivationException' occurred in Ninject.dll
Additional information: Error activating IUserRepository using binding from IUserRepository to IUserRepository
No constructor was available to create an instance of the implementation type.
Activation path:
1) Request for IUserRepository
Suggestions:
1) Ensure that the implementation type has a public constructor.
2) If you have implemented the Singleton pattern, use a binding with InSingletonScope() instead.
Bind<IUserRepository>().To<IUserRepository>();
这一行至少是部分问题;您没有告诉 Ninject 要使用 具体 IUserRepository
的实现。
它实际上就在错误消息中(强调我的)
Additional information: Error activating IUserRepository using binding from IUserRepository to IUserRepository
由于您无法创建接口的实例,因此您至少需要有一个 IUserRepository
的实现(例如 UserRepository
)并将其绑定到接口:
Bind<IUserRepository>().To<UserRepository>();
此外,[Inject]
属性在这种情况下毫无意义,因为您没有注入任何东西 - 您是直接从容器中自己创建依赖项(这没关系,尽管您可以进行适当的注入,请参阅 here 了解一些想法,这些想法也适用于 Ninject)