我的实体框架上下文中包含以下代码。
我正在使用重载的构造函数注入内存数据库进行测试。这工作正常但是当我在我的MVC应用程序中使用它时,我需要为DbConnection配置StructureMap。我不知道该怎么做
public class EfContext : DbContext
{
//This can be a full blown connection string or if it is just a single string like this it is defaulting to SQL Express
public EfContext() : base("SQLExpressPaxiumMusic")
{
}
public EfContext(DbConnection connection) : base(connection, true)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new DbContextInitialiser());
}
public DbSet<User> Users { get; set; }
}
public static IContainer Initialize()
{
ObjectFactory.Configure(config =>
{
config.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
config.For<IWebAuthenticator>().Use<WebAuthenticator>();
config.For<EfContext>().Use<EfContext>();
config.For<IUserRepository>().Use<UserRepository>();
config.For<DbConnection>() ****What goes here**** ????
});
return ObjectFactory.Container;
}
答案 0 :(得分:0)
您应该告诉StructureMap您要使用哪个EfContext
构造函数。在您的情况public EfContext(DbConnection connection)
中,StructureMap默认使用最贪婪的构造函数,即参数最多的构造函数。所以在运行时,你想指定构造函数public EfContext()
,它将从connectionstring创建DbConnection
:
config.For<EfContext>().Use<EfContext>().SelectConstructor(() => new EfContext());
另外,不推荐使用ObjectFactory
,强烈建议不要使用它。有关在ASP.NET Mvc应用程序中设置StructureMap的推荐方法,请参阅http://structuremap.github.io/integrations/aspnet-mvc/。
编辑:使用正确的SelectConstructor
语法,因为我忘记了......