DI 용 Ninject를 사용하고 IDbContext를 생성자 매개 변수로 내 리포지토리에 주입하고 있습니다. 나는 "서로 다른 ObjectContext 개체에 연결되어 있기 때문에 두 개체 간의 관계를 정의 할 수 없습니다." 문제가 ASP.NET MVC, EF 및 Ninject : 다른 ObjectContext 문제
public void BindManager(Space space, Manager manager) { if (space != null && manager != null) { space.Managers.Add(manager); _spaceRepo.Update(space); } }
없었다 : public ActionResult BindSpace(int spaceId, int managerId)
{
Space space = _spaceService.GetSpace(spaceId);
Manager manager = _managerService.GetManager(managerId);
if (space != null && manager != null)
{
_spaceService.BindManager(space, manager);
}
return RedirectToAction("GetSpaceBindingForm", new { id = space.Id });
}
이것은 서비스 방법입니다 : 이것은 내 컨트롤러의 액션 메소드입니다
: 이런 일을하려고 오류 동안 비 관련 엔티티를 추가 및 업데이트합니다.
ninjectKernel.Bind<IDbContext>().To<SPBSObjectContext>().InSingletonScope().WithConstructorArgument("nameOrConnectionString", "ShoppingPointBrowsingSystem");
내가 웹을 검색하고 모두 구현하고 NinjectModule 추상 기본 클래스를 사용하지만, 나는 다음과 같은 코드를 가지고 :
내가 사용하는 경우에는 문제가 없습니다. 여기서 내가 뭘 잘못하고 있니?
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
// HTTP Context
ninjectKernel.Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current));
// Context
ninjectKernel.Bind<IDbContext>().To<SPBSObjectContext>().InRequestScope().WithConstructorArgument("nameOrConnectionString", "ShoppingPointBrowsingSystem");
// Repositories
ninjectKernel.Bind<IRepository<Admin>>().To<EfRepository<Admin>>().InRequestScope();
ninjectKernel.Bind<IRepository<Manager>>().To<EfRepository<Manager>>().InRequestScope();
ninjectKernel.Bind<IRepository<ShoppingCenterSpace>>().To<EfRepository<ShoppingCenterSpace>>().InRequestScope();
ninjectKernel.Bind<IRepository<IndependentStoreSpace>>().To<EfRepository<IndependentStoreSpace>>().InRequestScope();
ninjectKernel.Bind<IRepository<Space>>().To<EfRepository<Space>>().InRequestScope();
// Services
ninjectKernel.Bind<IAuthenticationService<Admin>>().To<AdminFormsAuthenticationService>();
ninjectKernel.Bind<IAdminService>().To<AdminService>();
ninjectKernel.Bind<IManagerService>().To<ManagerService>();
ninjectKernel.Bind<IShoppingCenterSpaceService>().To<ShoppingCenterSpaceService>();
ninjectKernel.Bind<IIndependentStoreSpaceService>().To<IndependentStoreSpaceService>();
ninjectKernel.Bind<ISpaceService>().To<SpaceService>();
}
}
두 인스턴스는 어디서 발생합니까? – SLaks
'EFRepository'는'IDbContext'를 어디에서 가져 옵니까? 각각이 자기 자신을 창조하는 것처럼 나에게 보인다. –
그들은 모두 생성자 매개 변수로 IDbContext를 주입합니다. –