Ninject - 将实例实例化提取到单独的项目/类

本文关键字:单独 项目 提取 实例 实例化 Ninject | 更新日期: 2023-09-27 18:32:40

我正在尝试将接口绑定提取到实现它们的类,并将实例实例化提取到单独的项目。

这是我到目前为止所拥有的:

 public class DependencyModule : NinjectModule
    {
        public override void Load()
        {
            Bind<IMyClass>().To<MyClass>();
        }
    }

这是我的模块。在这个类中,我想创建一个静态方法,当传递时,任何接口都会尝试查找绑定到它的类并返回它的实例:

public static class Resolver<T, U>
    {
        public static T GetInstance<T>(U requestedInterfaceInstance)
        {
            var kernel = new StandardKernel(new DependencyModule());
            return kernel.Get<requestedInterfaceInstance>();
        }
    }

所以,我的猜测是我需要两个类型参数?一个用于我要返回的对象的返回类型(例如 MyClass 实例),另一个用于我的方法参数,在本例中为 (IMyClass)。

我怎样才能以更好的方式完成这项工作?谢谢。

Ninject - 将实例实例化提取到单独的项目/类

  • 不应为每个请求/实例化重新创建内核。创建内核一次(new Standardkernel()...),然后对每个请求使用相同的实例
  • 您实现的是所谓的服务定位器模式。ninject 和 Dependency-Injection 容器的思想通常遵循注册解析发布模式。理想情况下,应该只对根组件进行一次kernel.Get<>调用。所有其他组件都注入到根组件中。
  • 如果在某些时候你真的需要专门创建一个实例 - 而不是通过构造函数注入 - 你应该使用抽象工厂模式。或者更简单,使用 ninject 工厂扩展