Ninject - Извлечение экземпляра экземпляра в отдельный проект / класс

1

Я пытаюсь извлечь привязку интерфейсов к классам, которые реализуют их, и экземпляр экземпляра в отдельный проект.

Это то, что у меня есть до сих пор:

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

Как я могу добиться этого лучше? Благодарю.

Теги:
dependency-injection
ninject

1 ответ

0
  • ядро не следует воссоздавать для каждого запроса/экземпляра. Создайте ядро один раз (новый Standardkernel()...), а затем используйте один и тот же экземпляр для каждого запроса
  • то, что вы реализовали, является так называемым шаблоном Locator. Идея контейнеров ninject и Dependency-Injection состоит в том, чтобы следовать шаблону Release Resolve Release. В идеале должен быть только один вызов kernel.Get<> - для корневого компонента. Все остальные компоненты вводятся в корневой компонент.
  • в какой-то момент вам действительно нужно специально создать экземпляр - а не путем инъекции конструктора - вы должны использовать шаблон Abstract Factory. Альтернативно и проще, используйте расширение фабрики ninject

Ещё вопросы

Сообщество Overcoder
Наверх
Меню