Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 信号机&x2B;统一DI_Asp.net Mvc 4_Unity Container_Signalr - Fatal编程技术网

Asp.net mvc 4 信号机&x2B;统一DI

Asp.net mvc 4 信号机&x2B;统一DI,asp.net-mvc-4,unity-container,signalr,Asp.net Mvc 4,Unity Container,Signalr,我已经在我的MVC4项目中成功地使用了Signalr,方法是通过设置一个普通的集线器,包括JS文件/Signalr/hubs,它可以工作 现在我正在尝试使用unity设置DI: 在Global.asax中 UnityContainer = Bootstrapper.Initialise(); var unityDependencyResolver = new UnityDependencyResolver(UnityContainer); // Used for MVC DependencyR

我已经在我的MVC4项目中成功地使用了Signalr,方法是通过设置一个普通的集线器,包括JS文件
/Signalr/hubs
,它可以工作

现在我正在尝试使用unity设置DI:

Global.asax中

UnityContainer = Bootstrapper.Initialise();
var unityDependencyResolver = new UnityDependencyResolver(UnityContainer);

// Used for MVC
DependencyResolver.SetResolver(unityDependencyResolver);

// Used for SignalR
GlobalHost.DependencyResolver = new SignalRUnityDependencyResolver(UnityContainer);

RouteTable.Routes.MapHubs();
Bootstrapper.cs

public static IUnityContainer Initialise()
{
    var unityContainer = new UnityContainer();

    unityContainer.RegisterType<IUsers, Users>();

    unityContainer.RegisterType<ChatHub>(new InjectionFactory(CreateMyHub));

    return unityContainer;
}

private static object CreateMyHub(IUnityContainer p)
{
    return new ChatHub(p.Resolve<IUsers>());
}
}

我的SignalRUnityDependencyResolver.cs

public class SignalRUnityDependencyResolver : DefaultDependencyResolver
{
    private readonly IUnityContainer _container;

    public SignalRUnityDependencyResolver(IUnityContainer container)
    {
        if (container == null)
        {
            throw new ArgumentNullException("container", "Containet cannot be null");
        }
        _container = container;
    }

    public override Object GetService(Type serviceType)
    {
        return _container.IsRegistered(serviceType) ? _container.Resolve(serviceType) : base.GetService(serviceType);
    }

    public override IEnumerable<Object> GetServices(Type serviceType)
    {
        return _container.IsRegistered(serviceType) ? _container.ResolveAll(serviceType) : base.GetServices(serviceType);
    }
}
公共类SignalRUnityDependencyResolver:DefaultDependencyResolver
{
专用只读IUnityContainer\u容器;
公共信号RunityDependencyResolver(IUnityContainer容器)
{
if(容器==null)
{
抛出新ArgumentNullException(“container”,“Containet不能为null”);
}
_容器=容器;
}
公共重写对象GetService(类型serviceType)
{
return _container.IsRegistered(serviceType)?_container.Resolve(serviceType):base.GetService(serviceType);
}
公共重写IEnumerable GetServices(类型serviceType)
{
return _container.IsRegistered(serviceType)?_container.ResolveAll(serviceType):base.GetServices(serviceType);
}
}
这适用于非集线器,因为所有依赖项都已解决,但现在不再生成javascript文件

我如何调试这一代的JS以及罪魁祸首在哪里?

您可以在配置中使用它 EnableJavaScriptProxies=false

代码如下所示:

        app.Map("/signalr", map =>
        {
            map.UseCors(CorsOptions.AllowAll);
            var hubConfiguration = new HubConfiguration
            {
                EnableJSONP = true,

                EnableJavaScriptProxies = false
            };

            map.RunSignalR(hubConfiguration);
        });

你能发布你的完整的
应用程序\u Start
方法吗?因为设置的顺序很重要:首先应在
RouteTable.Routes.MapHubs()之后设置
GlobalHost.dependencyrolver
并且仅在此之后,
RouteConfig.RegisterRoutes(RouteTable.Routes)应该被调用。我发布的是我所拥有的,所以我会处理订单。这是在中心注入Unity容器的另一种方法
        app.Map("/signalr", map =>
        {
            map.UseCors(CorsOptions.AllowAll);
            var hubConfiguration = new HubConfiguration
            {
                EnableJSONP = true,

                EnableJavaScriptProxies = false
            };

            map.RunSignalR(hubConfiguration);
        });