Я создаю представление, отображающее всю информацию о продукте для моего сайта. Я хочу создать класс обслуживания «Подробности», который обрабатывает большинство моих запросов. я переплетен своей сессия моих данных в GeneralWebApplicationDataNinjectModule:Как связать службу данных с другим классом обслуживания в Ninject?
Bind<IContentService>().To<ContentService>().InRequestScope();
Bind<ISession>()
.ToMethod(
context =>
context.Kernel.Get<IMasterSessionSource>()
.ExposeConfiguration()
.BuildSessionFactory()
.OpenSession()
)
.WhenInjectedInto<IContentService>()
.InRequestScope();
У меня есть класс ContentService, что тянуть все мои данные, что выглядит следующим образом:
public interface IContentService
{
IQueryable<Program> Programs { get; }
}
public class ContentService : IContentService
{
private readonly ISession _session;
public ContentService(ISession session)
{
_session = session;
}
public IQueryable<Program> Programs
{
get { return _session.Query<Program>(); }
}
}
... это прекрасно работает, когда я загрузить его в мой контроллер:
public class ProgramController : Controller
{
private static IContentService _contentService;
public ProgramController (IContentService contentService)
{
_contentService = contentService;
}
public ActionResult Details(string item)
{
var ProgramDetails = DetailsService.ProgramsFind();
//this is where i want to use the service class to pull data in DetailsService.
var model = new DetailPageViewModel
{
ProgramTables = GetUpComingCourses(),
};
return View("../Shared/DetailView", model);
}
так я создал новый класс обслуживания, чтобы вытащить детали, пытаясь с помощью ContentService:
public class DetailsService
{
private static IContentService _contentService;
public DetailsService(IContentService contentService)
{
_contentService = contentService;
}
public static IEnumerable<Programs> ProgramsFind()
{
var results =
_contentService
.Programs
.Where(
d => d.TypeId >= 16 || d.TypeId <= 18);
return results;
}
я получить System.NullReferenceException был необработанное с помощью пользовательского кода, Message = ссылка на объект не указывает на экземпляр объекта на линии в ProgramsFind(), где им вызова _contentService. Когда я отлаживаю то, что он говорит свой null.
Итак, я понял, что это связано с тем, что данные не привязаны к службе сведений. Когда я вхожу в моем InjectionDependency это:
Bind<IContentService>().To<DetailsService>().InRequestScope();
я получаю много ошибок, где он хочет, чтобы я реализовать все, Thats в ContentService в DetailsService, но я не хочу, чтобы повторить это. я просто хочу использовать контент, который ContentService нашел в моем DetailsService. Очень похоже на то, как контроллер легко это делает.
Я чувствую, что что-то Theres им не хватает ...
UPDATE
я думаю, что я мог бы понял что-то. Я добавил IDetailsService в контроллер и, похоже, успешно вытаскивает запросы.
private static IContentService _contentService;
// new
private static IDetailsService _detailsService;
public MobileController(IContentService contentService, IDetailsService detailsService)
{
_contentService = contentService;
//new
_detailsService = detailsService;
}