Как вы знаете, Ninject связывает все интерфейсы с реализациями в корне композиции.У нас есть класс, который зависит от внешней библиотеки DLL, но мы не хотим развертывать его (физический файл DLL в каталоге bin), если он не используется.Класс ExampleClass
хранится в нашем проекте Framework, это означает, что на него ссылается любое приложение, которое мы создаем.И именно поэтому мы получаем следующее при развертывании любого нашего приложения:
Не удалось загрузить файл или сборку ExternalDll, Версия = xxxxxx, Культура = нейтральный, PublicKeyToken = xxxxxxxxxxxxxxxx
Есть ли обходной путь, например, инкапсуляция реализации в другой класс или что-то еще?Или инициализация во время выполнения (шаблон Factory).Что из этого решит мою проблему?Я также попробовал Ленивое связывание, но безуспешно.
Внедрение в конструктор реализации, где используется внешняя DLL
namespace Framework
{
public class ExampleClass
{
private readonly IUsesExternalDll _usesExternalDll;
public ExampleClass(IUsesExternalDll usesExternalDll)
{
_usesExternalDll = usesExternalDll;
}
}
}
Интерфейс
public interface IUsesExternalDll
{
}
Реализация
using externalDll; //this using is a reference to external dll
public class UsesExternalDll : IUsesExternalDll
{
}
Переплет
kernel.Bind<IUsesExternalDll>().To<UsesExternalDll>().InTransientScope();