liv*_*ve2 5 c# dependency-injection ioc-container simple-injector
我尝试使用自定义参数“服务器”注册通信服务。但我想自动解决ILogger依赖关系,而不要两次设置此依赖关系。
最好的方法是什么?
SimpleInjector寄存器
var diContainer = new Container();
diContainer.Register<ILogger, DefaultLogger>();
//Good
diContainer.Register<ICommunicationService>(
() => new CommunicationService("server1"),
Lifestyle.Singleton);
//Bad
diContainer.Register<ICommunicationService>(
() => new CommunicationService(new DefaultLogger(), "server1"),
Lifestyle.Singleton);
Run Code Online (Sandbox Code Playgroud)
CommunicationService类别
public class CommunicationService : ICommunicationService
{
public CommunicationService(ILogger logger, string server)
{
}
}
Run Code Online (Sandbox Code Playgroud)
更新2017-11-27
@Steven我要运行两个CommunicationService具有不同配置的实例。在我的示例中server1和server2。
var container = new Container();
container.Register<ILogger, DefaultLogger>();
container.RegisterSingleton(new CommunicationServiceConfig { Server = "server1" });
container.RegisterSingleton(new CommunicationServiceConfig { Server = "server2" });
diContainer.Register<ICommunicationService, CommunicationService>(Lifestyle.Singleton);
diContainer.Register<ICommunicationService, CommunicationService>(Lifestyle.Singleton);
Run Code Online (Sandbox Code Playgroud)
原始类型的注入对于 DI 容器来说始终是一个麻烦的领域,因为诸如string int和 之类的原始类型bool会导致歧义。
因此,最简单的解决方案是将这个string配置值包装到它自己的配置类中,例如:
public class CommunicationServiceConfig
{
public string Server { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
让我们CommunicationService依赖CommunicationServiceConfig而不是string:
public class CommunicationService : ICommunicationService
{
public CommunicationService(ILogger logger, CommunicationServiceConfig config)
{
}
}
Run Code Online (Sandbox Code Playgroud)
通过此更改,组合根变为:
var container = new Container();
container.Register<ILogger, DefaultLogger>();
container.RegisterSingleton(new CommunicationServiceConfig { Server = "server1" });
diContainer.Register<ICommunicationService, CommunicationService>(Lifestyle.Singleton);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |