如何配置StructureMap以创建DbConnection

时间:2015-06-01 08:56:02

标签: c# entity-framework structuremap

我的实体框架上下文中包含以下代码。

我正在使用重载的构造函数注入内存数据库进行测试。这工作正常但是当我在我的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;
    }

1 个答案:

答案 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语法,因为我忘记了......