Asp.net 将类的实例注入构造函数

Asp.net 将类的实例注入构造函数,asp.net,asp.net-mvc,dependency-injection,structuremap,Asp.net,Asp.net Mvc,Dependency Injection,Structuremap,这是将类依赖项注入存储库的最佳实践吗?请记住,其他存储库将需要这个PetaPoco.Database实例,因为我希望每个存储库使用一个共享数据库连接对象 public class ConfigRepository : IConfigRepository { private Database DB; public ConfigRepository(PetaPoco.Database db) { DB = db;

这是将类依赖项注入存储库的最佳实践吗?请记住,其他存储库将需要这个PetaPoco.Database实例,因为我希望每个存储库使用一个共享数据库连接对象

public class ConfigRepository : IConfigRepository
{
        private Database DB;

        public ConfigRepository(PetaPoco.Database db)
        {
            DB = db;
        }
}
//下面是structuremap的配置方式

    ObjectFactory.Initialize(x =>
    {
        x.Scan(scan =>
        {
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
            scan.AddAllTypesOf<IController>();


        });

        x.Register<PetaPoco.Database>(new PetaPoco.Database("DBConnection"));

        x.For<IConfigRepository>().Use<ConfigRepository>();

    });
    return ObjectFactory.Container;
ObjectFactory.Initialize(x=>
{
x、 扫描(扫描=>
{
扫描。卡入总成();
scan.WithDefaultConventions();
scan.AddAllTypesOf();
});
x、 注册(新的PetaPoco.数据库(“数据库连接”);
x、 For().Use();
});
返回ObjectFactory.Container;

我听说这就是您需要的:

x.For<PetaPoco.Database>().Singleton().Use(()=>new PetaPoco.Database("connectionString"));
x.For().Singleton().Use(()=>newpetapoco.Database(“connectionString”);

我听说这就是您需要的:

x.For<PetaPoco.Database>().Singleton().Use(()=>new PetaPoco.Database("connectionString"));
x.For().Singleton().Use(()=>newpetapoco.Database(“connectionString”);


这真的取决于x是什么?可能有更好的语法来定义singletonI,我已经更新了这个问题,如果它有帮助的话。您知道应该如何管理PetaPoco.Database吗?这是一个工作单元吗?辛格尔顿?恐怕我不知道。我希望在整个应用程序中使用相同的实例对象,因为我知道PetaPocoit是否可能真的取决于x是什么?可能有更好的语法来定义singletonI,我已经更新了这个问题,如果它有帮助的话。您知道应该如何管理PetaPoco.Database吗?这是一个工作单元吗?辛格尔顿?恐怕我不知道。我希望在整个应用程序中使用相同的实例对象,因为我知道这是PetaPocoWho告诉你的?它与我的方法有什么不同?它确保了数据库作为一个单例使用。这是我的同事建议的,他使用StructureMap。在我的代码中,它将由这个备份,这意味着每次都会创建一个新的数据库对象吗?不,它被视为一个单例。这意味着每次只创建和使用一个实例&只有一个实例。您需要确保任何方法都是线程安全的,因为所有线程都将使用单例(只有一个实例可以看到)。使用单例方法可能会以更强大的方式强制作用域。谁告诉你的?它与我的方法有什么不同?它确保了数据库作为一个单例使用。这是我的同事建议的,他使用StructureMap。在我的代码中,它将由这个备份,这意味着每次都会创建一个新的数据库对象吗?不,它被视为一个单例。这意味着每次只创建和使用一个实例&只有一个实例。您需要确保任何方法都是线程安全的,因为所有线程都将使用单例(只有一个实例可以看到)。使用单例方法可以更有力地实施范围界定。