ServiceStack 和 SimpleInjector 一起使用抵制 API 服务

Using ServiceStack and SimpleInjector together to resister API service

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

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

我们想发布一套API的,以便我们的旧系统可以与新系统通信。

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

我已经安装了 ServiceStack.Mvc 但无法运行。

我试着按照这个 link: https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration

我认为这是因为 ServiceStack 有自己内置的 IoCSimpleInjector.

冲突

这是我的 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 吗?

该应用程序遵循 Onion Architecture,它分离了很多问题,这就是我们使用 SimpleInjector 的原因,我们经常使用它的 Packaging 功能。

任何帮助将不胜感激。

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

Simple Injector 的适配器如下所示:

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();
    }
}