2

内部アプリのいくつかはMVC3であり、すべてNinject.MVCを使用しています。

ある時点ですべてのツールに影響する問題が発生しています。まず、エラーが発生します。

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.

に続く:

Execution of the command requires an open and available connection. The connection's current state is broken.

これは、ツールが使用されているときにいつでも発生する可能性があります。ニンジェクトを最新バージョンに更新しました。これは多くの点で役立ちました。エラーが発生することはめったにありませんが、ツールを頻繁に使用すると発生します。nugetパッケージマネージャーを介してNinject.MVC3をセットアップし、適切なサービスをNinjectWebCommon.csに登録しているだけです。

これが私たちのコントローラーです。NinjectWebCommonとglobal.asaxがセットアップされていますが、ここで何か間違っていることがありますか?

これを確実に修正することがわかっているのは、Ninjectを完全に削除し、各コントローラーでリポジトリーをインスタンス化することです。しかし、それは私が推測している良い解決策ではありません。

Global.asax(一部のルートを削除):

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Index", // Route name
            "", // URL with parameters
            new { controller = "Home", action = "Index" } // Parameter defaults
        );
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
}

NinjectWebCommon.cs:

public static class NinjectWebCommon 
{
    private static readonly Bootstrapper bootstrapper = new Bootstrapper();

    /// <summary>
    /// Starts the application
    /// </summary>
    public static void Start() 
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
        bootstrapper.Initialize(CreateKernel);
    }

    /// <summary>
    /// Stops the application.
    /// </summary>
    public static void Stop()
    {
        bootstrapper.ShutDown();
    }

    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);
        return kernel;
    }

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IToolRepository>().To<ToolRepository>();
    }        
}

HomeController:

public class HomeController : Controller
{
    private IBattleStationRepository _repository;
    private LoginEntities _loginEntities;
    private SpecialLib _speclib;
    private AccessManager _accessManager;


    public HomeController(IBattleStationRepository repository)
    {
        _repository = repository;
        _speclib = new SpecialLib();
        _loginEntities = new LoginEntities();
        _accessManager = new AccessManager();

    }

    public virtual ActionResult Index()
    {
        var byPassHomePage = false;
        var urlReferrer = HttpContext.Request.UrlReferrer;
        var user = _accessManager.GetUserByUserName(User.Identity.Name);
        if (urlReferrer == null)
        {
            byPassHomePage = true;
        }

        if (user.TeamId != null && byPassHomePage == true)
        {
            return RedirectToAction("Release", "Release", new { shortTeamName = user.Team.ShortName });
        }

        return View();
    }
}
4

0 に答える 0