asp.net-mvc - 使用ServiceStack和SimpleInjector一起抵抗API服务

标签 asp.net-mvc web-services servicestack ioc-container simple-injector

我们正在尝试将 ServiceStack 与我们的 ASP.NET MVC 5 应用程序一起使用。

因此,最终用户将使用充分利用 ASP.NET MVC 的 Web 应用程序。

我们希望发布一组API,以便我们的旧系统可以与新系统进行通信。

新系统利用 SimpleInjector IoC 将整个应用程序粘合在一起。

我已经安装了 ServiceStack.Mvc 但无法让它工作。

我尝试点击此链接:https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration

我认为这是因为ServiceStack有自己内置的IoC,它与SimpleInjector冲突。

这是我的Application_Start

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);            

    Bootstrap.Configure();

    #region Initialize SimpleInjector
    var container = new Container();

    InitializeContainer(container);
    container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
    container.RegisterMvcIntegratedFilterProvider();
    container.Verify();

    DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
    #endregion            

    new AppHost().Init();
}

这是我的AppHost

public class AppHost : AppHostBase
{
    public AppHost() : base("MVC 5", typeof(MyServices).Assembly) { }

    public override void Configure(Container container)
    {
        SetConfig(new HostConfig
        {
            HandlerFactoryPath = "api",
        });

       // ControllerBuilder.Current.SetControllerFactory(
          //  new FunqControllerFactory(container));
    }
}

[ServiceStack.Route("/hello/{Name}")]
public class Hello
{
    public string Name { get; set; }
}

public class MyServices : Service
{
    public object Any(Hello request)
    {
        return request;
    }
}

我做错了什么?当我访问 website.com/api 时,我只得到一个 404 资源未找到页面。

如果可能的话,我想继续使用SimpleInjector,这可能吗?或者我是否需要在整个应用程序中采用 ServiceStack IoC

应用程序遵循洋葱架构,它分离了很多关注点,这就是我们使用SimpleInjector的原因,我们使用它的Packaging > 功能相当多。

任何帮助将不胜感激。

更新:经过更多研究,我发现可以编写一个适配器,如以下链接所述:https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container但没有 SimpleInjector 实现的示例,有人可以帮忙吗?

最佳答案

简单注入(inject)器的适配器如下所示:

public class SimpleInjectorServiceStackAdapter : IContainerAdapter
{
    private readonly Container container;

    public SimpleInjectorServiceStackAdapter(Container container) {
        this.container = container;
    }

    public T Resolve<T>() {
        return (T)this.container.GetInstance(typeof(T));
    }

    public T TryResolve<T>() {
        var registration = this.container.GetRegistration(typeof(T));
        return registration == null ? default(T) : (T)registration.GetInstance();
    }
}

关于asp.net-mvc - 使用ServiceStack和SimpleInjector一起抵抗API服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166928/

相关文章:

web-services - 如何将 SoapUI 请求设置保存在一个地方?

asp.net - 在.NET Web 服务中将soap 前缀更改为soapenv

c# - 如何自动将 .NET 函数调用映射到属性?

ServiceStack Dictionary DTO Dictionary<string, string> 数据类型反序列化

asp.net-mvc - ASP.NET MVC 2 预览 2 : Areas duplicate controller problem

c# - 带连字符的 html 属性与 asp.net mvc

c# - 在 Entity Framework 保存时修剪字符串

web-services - wsimport 如何从 WSDL 为 http :binding GET/POST 创建 Web 服务客户端

c# - Linux上的Web服务

c# - 如何实现类似SO的url重写