Каков наилучший способ интеграции Dependency Injection с использованием Unity при использовании статических методов? - PullRequest
0 голосов
/ 08 марта 2010

Я столкнулся с предстоящим обновлением сайта ASP.NET, и я думаю о внедрении DI с использованием Unity. Я исследовал сторону ASP.NET DI и у меня есть 2 варианта (Global.asax или IHttpModule). Я счастлив использовать либо.

Как всегда, существует устаревшая объектная модель, которую я хотел бы обновить / изменить. Я хотел бы пойти по пути внедрения Constructor (передавая в DAO), однако, у каждого объекта есть смесь статических методов и методов экземпляра, которые в настоящее время оба вызывают в БД, используя сами объекты SqlCommand. Я хочу удалить это, чтобы обеспечить независимость от БД, поэтому кто-нибудь может предложить лучший способ сделать 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 голосов
/ 08 марта 2010

Если вы удалите все статические методы и введете некоторые абстракции, вам будет хорошо пойти:

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
}
...