#c# #ninject
#c# #ninject
Вопрос:
Я создал эти интерфейсы и классы:
interface IInterpreter.
interface IViz.
interface IVizDescriptor.
где,
class IntOne : IInterpreter.
и,
class VizDescOne : IVizDescriptor {
VizDescOne(string title, Type type, SchemaType schemaType, string desc)
{ }
}
и,
class VizOne : IViz {
public VizOne (IntOne, IVizDescriptor)
{
}
}
Я понял, что могу создавать привязки между IInterpreter
и IntOne
для того, чтобы, когда я запрашиваю a VizOne
, a IntOne
вводится в конструктор первого параметра.
Проблема в том, что нет способа создать подходящую привязку для VizDescOne
.
параметры конструктора слишком зависят от каждой ситуации, я не могу создать для него привязку.
VizDescOne
Есть ли какой-нибудь способ предоставить его manually
и разрешить VizOne (IntOne, IVizDescriptor)
конструктор?
Однако IVizDescriptor
слишком многое зависит от любой конкретной ситуации
Комментарии:
1. Я ожидаю, что такие параметры, как
title
,type
иdesc
являются значениями времени выполнения; они не являются постоянными в течение всего срока службы приложения. Вы не должны злоупотреблять своим контейнером для внедрения данных времени выполнения в компоненты .
Ответ №1:
У вас есть много вариантов:
- Вы можете привязать IVizDescriptor к VizDescOne с помощью аргументов конструктора:
kernel.Bind<IVizDescriptor>().To<VizDescOne>() .WithConstructorArgument("title", "someTitle").WithConstructorArgument("type", typeof(int))...
- Вы можете привязать IVizDescriptor к константе:
IVizDescriptor vizDescOne = new VizDescOne(...); kernel.Bind<IVizDescriptor>().ToConstant(vizDescOne);
- Вы можете привязать IVizDescriptor к методу:
kernel.Bind<IVizDescriptor>().ToMethod(o=> new VizDescOne(...));
Вы можете прочитать больше об этих параметрах и еще о нескольких здесь и здесь .
В качестве примечания я действительно рекомендую вам прочитать комментарий @Steven и статью, на которую он ссылался, потому что, если параметры конструкторов соответствуют значениям времени выполнения, вам следует пересмотреть свой дизайн.
Комментарии:
1. (что) такое ядро? Документы ninject кажутся довольно неуловимыми.