我们正在尝试将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
实现的例子,任何人都可以帮忙?
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(); } }