【问题标题】:Ninject - Extracting instance instantiation to a separate project / classNinject - 将实例实例化提取到单独的项目/类
【发布时间】:2023-03-14 16:49:01
【问题描述】:

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

这是我目前所拥有的:

 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)。

我怎样才能以更好的方式做到这一点?谢谢。

【问题讨论】:

    标签: c# .net dependency-injection ninject


    【解决方案1】:
    • 不应为每个请求/实例化重新创建内核。创建一次内核(new Standardkernel()...),然后为每个请求使用相同的实例
    • 您实现的是所谓的Service Locator 模式。 ninject 和 Dependency-Injection 容器的想法通常是遵循Register Resolve Release 模式。理想情况下,对于根组件,应该只调用一次kernel.Get&lt;&gt;。所有其他组件都注入到根组件中。
    • 如果在某些时候您确实需要专门创建一个实例 - 而不是通过构造函数注入 - 您应该使用 Abstract Factory 模式。或者更简单,使用ninject factory extension

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      相关资源
      最近更新 更多