【发布时间】:2014-08-02 23:48:55
【问题描述】:
我有一个使用多个数据库的应用程序。
我发现我可以通过使用连接构建器来改变它。像这样:
var configNameEf = "ProjectConnection";
var cs = System.Configuration.ConfigurationManager.ConnectionStrings[configNameEf].ConnectionString;
var sqlcnxstringbuilder = new SqlConnectionStringBuilder(cs);
sqlcnxstringbuilder.InitialCatalog = _Database;
但是我需要更改 UnitOfWork 的 autofac Lifescope,以便它现在将请求重定向到好的数据库实例。
一段时间后我发现我可以通过 DelegatedHandler 这样做:
HttpConfiguration config = GlobalConfiguration.Configuration;
DependencyConfig.Register(config, sqlcnxstringbuilder.ToString());
request.Properties["MS_DependencyScope"] = config.DependencyResolver.GetRequestLifetimeScope();
问题是,有没有其他方法可以改变请求的 MS_DependencyScope 参数。这个解决方案有效,但我认为它有点阴暗。
这里是 DependencyConfig 中的注册表:
public static void Register(HttpConfiguration config, String bdContext = null)
{
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.Register(_ => new ProjectContext(bdContext)).As<ProjectContext>().InstancePerApiRequest();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerApiRequest();
// Register IMappingEngine
builder.Register(_ => Mapper.Engine).As<IMappingEngine>().SingleInstance();
config.DependencyResolver = new AutofacWebApiDependencyResolver(builder.Build());
config.DependencyResolver.BeginScope();
}
【问题讨论】:
-
这个问题并不完全清楚 - 您是否尝试根据每个请求更改数据库?或者您是否根据某种部署配置在应用程序范围内更改它?
-
如果它与上次调用不同,它会根据每个请求进行更改。
标签: c# entity-framework-4 autofac