使用ninject将存储库注入winform错误

本文关键字:注入 winform 错误 存储 ninject 使用 | 更新日期: 2023-09-27 17:58:23

我正在使用Ninject将我的存储库注入到我的windows窗体中。

所以我从nuget安装了ninject。我把它添加到我的窗口窗体中:

 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.

使用ninject将存储库注入winform错误

 Bind<IUserRepository>().To<IUserRepository>();

这条线至少是问题的一部分;您并没有告诉Ninject要使用IUserRepository的具体实现。

它实际上就在错误信息(强调矿)中

附加信息:使用从IUserRepositoryIUserRepositoryTR的绑定激活IUserRepository时出错

由于您不能创建接口的实例,因此您至少需要有一个IUserRepository(例如UserRepository)的实现,并将其绑定到接口:

 Bind<IUserRepository>().To<UserRepository>();

此外,在这种情况下,[Inject]属性毫无意义,因为您没有注入任何东西-您自己直接从容器创建依赖项(这是可以的,尽管您可以进行适当的注入,但请参阅此处了解一些想法,这也适用于Ninject)