当前位置:  开发笔记 > 编程语言 > 正文

同时使用ServiceStack和SimpleInjector来修复API服务

如何解决《同时使用ServiceStack和SimpleInjector来修复API服务》经验,为你挑选了1个好方法。

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

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

我们想要发布一组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在整个申请中采用?

应用程序遵循Onion Architecture分离了许多问题,这就是我们使用的原因SimpleInjector,我们正在使用它的Packaging功能.

任何帮助都感激不尽.

更新:经过一番研究后我发现可以编写一个适配器,因为这个链接解释了:https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container但是没有SimpleInjector实现的例子,任何人都可以帮忙?



1> Steven..:

Simple Injector的适配器如下所示:

public class SimpleInjectorServiceStackAdapter : IContainerAdapter
{
    private readonly Container container;

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

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

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

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有