我正在使用ServiceStack做一个应用程序。我可以毫无问题地注入一个对象,但是,可以在Service Class之外修改该对象,因此,我需要重新注入 这是代码:
public class ClientManager: ApplicationContext{
public ClientManager(AppConfig appConfig)
{
_appConfig = appConfig;
_activeForm = LayoutFactory(appConfig.Layout);
var appHost = new AppHost(_activeForm, _appConfig);
var listeningOn = string.Format("http://*:{0}/", new Uri(appConfig.UrlBroker).Port);
appHost.Init();
appHost.Start(listeningOn);
var timerMetadata = new Timer(CheckMetadata, null, 0, 60000);
}
}
public class AppHost : AppSelfHostBase
{
private ILayout _layout;
private AppConfig _appConfig;
public AppHost(ILayout activeForm, AppConfig appConfig)
: base("ClientService", typeof(ClientService).Assembly)
{
_layout = activeForm;
_appConfig = appConfig;
}
public override void Configure(Container container)
{
container.Register("activeForm", _layout);
container.Register("config", _appConfig);
}
}
public class ClientService : Service
{
public HttpResult Post(Person request)
{
HttpResult response = new HttpResult();
_initConf = ServiceStackHost.Instance.Container.ResolveNamed<AppConfig>("config");
}
}
因此,类ClientManager有一个线程可以修改对象appConfig和activeForm(这个对象被注入到服务类中) 现在,如果我修改了对象,它就不会再次注入它。我想我应该处理AppHost,然后重新开始,你怎么看? 感谢
答案 0 :(得分:2)
除非您正在运行要启动/销毁多个AppHost实例的集成测试,否则您很少需要处理AppHost。
此外,我强烈建议在注册依赖项时不要使用名称,只需正常使用依赖项的类型,例如:
container.Register(_layout);
container.Register(_appConfig);
通过声明具有该类型的公共属性,IOC中注册的任何依赖项将自动注入到您的Service类中,例如:
public class ClientService : Service
{
public AppConfig AppConfig { get; set; }
public HttpResult Post(Person request)
{
HttpResult response = new HttpResult();
var _initConf = AppConfig;
}
}
这将注入在IOC中注册的相同实例,因此如果您稍后修改该实例,则默认情况下Service将注入相同的修改实例。