Для начала я использую Ninject 1.5. У меня есть два проекта: веб-проект и библиотека классов. Моя конфигурация DI находится в веб-проекте. В моей библиотеке классов У меня есть следующие определены:Ninject: Как я вставляю в библиотеку классов?
public interface ICacheService<T>
{
string Identifier { get; }
T Get();
void Set(T objectToCache, TimeSpan timeSpan);
bool Exists();
}
А затем конкретный класс называется CategoryCacheService.
В моем веб-проекта я связываю два:
Bind(typeof(ICacheService<List<Category>>)).To(typeof(CategoryCacheService)).Using<SingletonBehavior>();
В моей библиотеке классов У меня есть методы расширения для класса HtmlHelper, например:
public static class Category
{
[Inject]
public static ICacheService<List<Category>> Categories { get; set; }
public static string RenderCategories(this HtmlHelper htmlHelper)
{
var c = Categories.Get();
return string.Join(", ", c.Select(s => s.Name).ToArray());
}
}
Мне сказали, что вы не может вводить в статические свойства, вместо этого я должен использовать Kernel.Get <>() - Однако ... Поскольку код выше находится в библиотеке классов, у меня нет доступа к ядру. Как я могу получить Ядро с этого момента или есть лучший способ сделать это?
Ruben, CacheServiceResolver кажется правильной идеей для меня, поскольку Я могу повторно использовать этот шаблон в будущем. Есть ли у вас примеры настройки преобразователя? – DennyFerra
К сожалению, у меня нет руки. Общая идея заключалась бы в том, что везде, где вы создаете свой новый стандартный класс, вы указываете ссылку на него. Тогда у вас есть что-то такое же простое, как 'void RegisterCacheServiceResolver (ядро ядра) {Bind(). ToConstant (новый CacheServiceResolver (ядро));}' на одном из модулей, которому вы передаете ядро. Или вы можете создать Ядро, а затем передать его конструктору любого модуля, который ему нужен, после чего вы добавите модуль [в отличие от передачи их всех в конструктор ядра как обычно). –