Ninject WithConstructorArgument: нет соответствующих привязок, и тип не является самосвязываемым
Мое понимание WithConstructorArgument, вероятно, ошибочно, потому что следующее не работает:
У меня есть сервис, давайте назовем его MyService, конструктор которого принимает несколько объектов, и строковый параметр testEmail. Для этого строкового параметра я добавил следующую привязку Ninject:
string testEmail = "[email protected]";
kernel.Bind<IMyService>().To<MyService>().WithConstructorArgument("testEmail", testEmail);
Однако при выполнении следующей строки кода я получаю исключение:
var myService = kernel.Get<MyService>();
Вот исключение, которое я получаю:
Ошибка активации строки. Соответствующие привязки отсутствуют, а тип не является самосвязываемым. Путь активации:
2) Внедрение строки зависимости в параметр testEmail конструктора типа MyService
1) Запрос на MyService
Предложения:
1) Убедитесь, что вы определили привязку для строки.
2) Если привязка была определена в модуле, убедитесь, что модуль был загружен в ядро.
3) Убедитесь, что вы случайно не создали более одного ядра.
4) Если вы используете аргументы конструктора, убедитесь, что имя параметра соответствует имени параметра конструкторов.
5) Если вы используете автоматическую загрузку модуля, убедитесь в правильности пути поиска и фильтров.
Что я здесь не так делаю?
ОБНОВИТЬ:
Вот конструктор MyService:
[Ninject.Inject]
public MyService(IMyRepository myRepository, IMyEventService myEventService,
IUnitOfWork unitOfWork, ILoggingService log,
IEmailService emailService, IConfigurationManager config,
HttpContextBase httpContext, string testEmail)
{
this.myRepository = myRepository;
this.myEventService = myEventService;
this.unitOfWork = unitOfWork;
this.log = log;
this.emailService = emailService;
this.config = config;
this.httpContext = httpContext;
this.testEmail = testEmail;
}
У меня есть стандартные привязки для всех типов параметров конструктора. Только «строка» не имеет привязки, а HttpContextBase имеет привязку, которая немного отличается:
kernel.Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(new HttpContext(new MyHttpRequest("", "", "", null, new StringWriter()))));
и MyHttpRequest определяется следующим образом:
public class MyHttpRequest : SimpleWorkerRequest
{
public string UserHostAddress;
public string RawUrl;
public MyHttpRequest(string appVirtualDir, string appPhysicalDir, string page, string query, TextWriter output)
: base(appVirtualDir, appPhysicalDir, page, query, output)
{
this.UserHostAddress = "127.0.0.1";
this.RawUrl = null;
}
}