【发布时间】:2014-10-04 21:04:11
【问题描述】:
我是 autofac 新手,希望了解将运行时值传递给构造函数的最佳实践。我已经阅读了一堆 stackoverflow 问题,但没有一个是完全充实的。我们是否应该使用委托、工厂来创建服务等。我知道传递容器并不是实现此目的的最佳方式。
在我的特定情况下,我有一个服务可以访问多个依赖项,例如日志记录、数据提供程序等。除了传递的少数服务外,我还需要捕获运行时参数,例如用户 ID、密码。 SomeService 需要用户 ID 和密码,并在 Web 查看器执行特定操作时进行查找。以下是我所拥有的,突出显示的是问题。
public class SomeService : ISomeService
{
private readonly IDataProvider _dataProvider;
private readonly ILog _log;
private readonly string _username;
private readonly string _password;
public SomeService(IDataProvider dataProvider, ILog log,
string username, string password)
{
_dataProvider = dataProvider;
_log = log;
_username = username;
_password = password;
}
}
dataprovider和log在autofac中配置
builder.RegisterType<DataProviderService>().As<IDataProvider>()
builder.RegisterType<SomeLogService>().As<ILog>()
这个“SomeService”的大部分功能都需要用户名和密码才能在执行任务之前进行验证,因此认为最好在创建时传递给构造函数,但从未处理过 autofac 的运行时要求。我已经查看了Autofac - resolving runtime parameters without having to pass container around 的问题,它似乎与我需要的很接近,但需要更多关于实现此目的的最佳方法的反馈。
【问题讨论】:
-
您能否更具体地了解
SomeService是什么以及它如何使用用户名和密码信息?这样任何人都可以为您提供一些更针对您的案例的建议。
标签: c# inversion-of-control ioc-container autofac