Использую библиотеку Ninject. Помогите разобраться почему не работает Property Injection. В проекте создаю библиотеку классов и консольное приложение для ее отладки. Добавляю UnitOfWork
internal interface IUnitOfWork : IDisposable
{
void SaveChanges();
IRepository<T> Repository<T>() where T : class;
}
internal class UnitOfWork : IUnitOfWork, IDisposable
{
[Inject]
public IDBContext context { get; set; }
public void Dispose()
{
if (context != null)
{
context.Dispose();
context = null;
}
}
public IRepository<T> Repository<T>() where T : class
{
return new Repository<T>();
}
public void SaveChanges()
{
context.SaveChanges();
}
}
Также в библиотеке классов создаю модельный объект на основе данных из БД
internal class ObjCtlg
{
public IEnumerable<IComposite> Items { get; set; }
[Inject]
internal IUnitOfWork uow { get; set; }
public ObjCtlg()
{
using (uow)
{
Items = uow.Objects().Find(d => d.Id != 0).Select(c =>
new Document
{
Id = c.Id,
Name = c.Name,
});
}
}
}
Добавляю модуль Ninject в библиотеку классов
public class NinjectBindingModule : NinjectModule
{
public override void Load()
{
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
В консольном приложении добавляю ядро Ninject
public static class IoCKernel
{
private static IKernel kernel;
public static void CreateKernel()
{
kernel = new StandardKernel(new NinjectSettings
{
InjectNonPublic = true,
InjectParentPrivateProperties = true,
LoadExtensions = true,
});
kernel.Load(AppDomain.CurrentDomain.GetAssemblies());
}
public static T Get<T>()
{
return kernel.Get<T>();
}
public static void Inject<T>(T item)
{
kernel.Inject(item);
}
}
Создаю ядро при старте приложения
static void Main(string[] args)
{
IoCKernel.CreateKernel();
var test = new Test();
}
При создании ядра я прохожу по модулю "NinjectBindingModule : NinjectModule" из библиотеки классов. Т.е как я ожидаю Binding выполнился. После этого я создаю тестовый объект чтобы посмотреть как прошел биндинг UnitOfWork
internal class Test
{
public ProgramFirst()
{
var t = new ObjCtlg();
}
}
В итоге свойтсво имеет значение null
[Inject]
internal IUnitOfWork uow { get; set; }
Я ожидал что при создании тестового объекта произойдет Injection, но этого не происходит. Новичек в Ninject подскажите что делаю не так?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем привет, недавно начал осваиватьnet mvc - возник вопрос выборки данных из БД
Весьма странный и глупый вопрос пришел в голову