Как использовать Ninject при внедрении в конструктор типа во внешней сборке - PullRequest
2 голосов
/ 09 сентября 2010

Я загружаю тип из внешней сборки и хочу создать экземпляр типа. Однако этот тип / класс настраивается для внедрения конструктора объектами, которые в настоящее время управляются / связаны Ninject. Как я могу использовать Ninject, чтобы создать экземпляр этого типа и ввести любые зависимости конструктора?

Ниже показано, как я получаю этот тип.

Assembly myAssembly = Assembly.LoadFrom("MyAssembly.dll");
Type type = myAssembly.GetType("IMyType");

1 Ответ

2 голосов
/ 10 сентября 2010

Предполагая, что вы создали Kernel, вы должны иметь возможность создать и разрешить его с помощью:

kernel.Get(type)

.... тогда я прочитал вопрос .... Предполагая, что MyAssembly.dll имеет реализацию IMyType, вам нужно (в вашей основной сборке): -

kernel.Load( "MyAssembly.dll")

А в вашей динамически загруженной сборке: -

public class Module : StandardModule
{
    public override void Load()
    { 
        Bind<IMyType>().To<MyType>();
    }
}

И не забудьте посмотреть, является ли MEF ответом здесь, так как вы не хотите писать множество явного управления плагином и / или логику обнаружения, если вы можете помочь ему (но если вы просто делаете простые вещи и только выполняя Assembly.LoadFrom() с целью задать вопрос, вы, вероятно, все еще в милости Нинъекта.

То же самое, если вам действительно нужно разрешить интерфейс через Assembly.GetType(), вам, вероятно, следует использовать что-то вроде dynamic, чтобы выполнить позднее связывание, которое вам, вероятно, придется сделать (и прежде чем вы это узнаете, вы должны использовать динамический язык или хостинг скриптового языка)

...