2016-09-15 48 views
3

我有应该有一个Service的实例(访问数据库和其他服务)类:从ServiceStack的IoC容器,它取决于另一注册元素上解决

public class MyFoo : IFoo 
{ 
    public Service Service { get; set; } 

    public MyFoo (Service service) 
    { 
     Service = service; 
    } 
} 

我想注册这个类ServiceStack的IoC容器。目前,我做这样的

container.Register<IFoo> (c => new MyFoo (c.TryResolve<MyService>())); 

这样确实很好,但它给我的印象很丑陋的容器来解决一个元素,而注册一个又一个。有没有更好的方法来实现这一目标?

回答

0

您也可以注册的依赖using one of the AutoWired APIs,如:

container.RegisterAutoWiredAs<MyFoo,IFoo>() 

而且ServiceStack将注资与任何已注册的依赖每个公共属性,所以你不需要你的构造函数,如:

public class MyFoo : IFoo 
{ 
    public Service Service { get; set; } 
} 
+0

这但我必须在AppHost中手动注册一个服务,比如'container.RegisterAutoWiredAs ();' 有没有办法解决这个问题? – mat

+0

@mat等待你在谈论ServiceStack服务作为依赖关系吗?你不应该注册ServiceStack服务,它们会被ServiceStack自动注册。有关在另一服务中调用服务的示例,请参见[服务网关](https://github.com/ServiceStack/ServiceStack/wiki/Service-Gateway)。 – mythz

+0

我的意思是一个ServiceStack服务,是的。我目前使用'ResolveService'方法,感谢关于网关的提示。 但我的问题仍然存在,我不知何故需要能够解决我的界面中的服务(或访问网关)。 – mat