使用静态方法时,使用Unity集成依赖注入的最佳方法是什么?

时间:2010-03-08 17:20:39

标签: c# asp.net unity-container

我面临即将升级到ASP.NET站点的问题,我正在考虑使用Unity引入DI。我研究了ASP.NET DI方面的东西,有2个选项(Global.asax或IHttpModule)。我很乐意使用它们。

与往常一样,我希望升级/更改遗留对象模型。我想沿着构造函数注入的路径(传入DAO)但是,每个对象都混合了静态和实例方法,这两种方法当前都使用SqlCommand对象本身调用DB。我希望将其删除以提供数据库独立性,因此在这种情况下,任何人都可以建议进行DI的最佳方法吗?如果需要的话,我会接受激烈的改变。

public class ExampleClass
{
       public ExampleClass(int test)
       {
           TestProperty = test;
       }

       public int TestProperty {get; set;}

       public int Save()
       {
          // Call DB and Save
          return 1;
       }

       public static ExampleClass Load(int id)
       {
          // Call DB and Get object from DB
          return new ExampleClass(1);
       }

}

感谢您的任何建议

马特

1 个答案:

答案 0 :(得分:0)

如果删除所有静态方法并引入一些抽象,那么你应该很高兴:

public class ExampleClass
{
    public int TestProperty { get; set; }
}

public interface IRepository
{
    ExampleClass Load(int id);
    int Save();
}

public class RepositorySql: IRepository
{
    // implement the two methods using sql
}

并在您的ASP页面中:

private IRepository _repo = FetchRepoFromContainer();
public void Page_Load() 
{
    var someObj = _repo.Load(1);
    // ... etc
}