【问题标题】:Using ServiceStack and SimpleInjector together to resister API service使用 ServiceStack 和 SimpleInjector 来抵抗 API 服务
【发布时间】:2015-12-08 22:05:05
【问题描述】:

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

所以最终用户将使用充分利用ASP.NET MVC的网络应用程序。

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

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

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

我尝试点击此链接: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,这可能吗?还是我需要在整个应用程序中采用ServiceStackIoC

该应用程序遵循Onion Architecture 分离了很多关注点,这就是我们使用SimpleInjector 的原因,我们大量使用它的Packaging 功能。

任何帮助将不胜感激。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢你会试一试
    • 我已更新 ServiceStack Wiki 以包含您的 SimpleInjector 解决方案,Thanx
    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多