SubSonic SimpleRepository и внедрение зависимостей - PullRequest
1 голос
/ 31 июля 2009

На кривой обучения. Знаю, один из вас, гуру, может помочь мне.

Я смотрю в SubSonic (SimpleRepository) и StructureMap. На самом деле пытаюсь обнять меня обоих.

Я хочу использовать SimpleRepository для простоты использования и позволить моим моделям определять базу данных, а не извлекать или создавать структуру БД изначально.

Я создаю конкретный класс, который наследуется от SimpleRepository

public class DataRepository : SimpleRepository
{
    public DataRepository() :   
        base("Application", SimpleRepositoryOptions.RunMigrations) 
        { }  
}

Добавить это в мою инициализацию приложения

ObjectFactory.Initialize(
    x => x.ForRequestedType<DataRepository>()  
        .TheDefaultIsConcreteType<DataRepository>()  
        .CacheBy(InstanceScope.Hybrid));

И теперь я уверен, что везде в приложении я использую один и тот же SimpleRepository.

Я делаю это слишком сложным? Или я на правильном пути здесь. Я знаю, что вы не знаете всех других подробностей, так что говорите со мной также в общих чертах. Спасибо.

1 Ответ

1 голос
/ 29 августа 2009

Я думаю, что вы пропустили одну из основных идей DI здесь. Эта идея заключается в использовании интерфейсов для абстрагирования вызывающего кода от конкретного класса, который фактически реализует функциональность.

public interface IDataRepository { }

internal class DataRepository : SimpleRepository, IDataRepository
{
}

ObjectFactory.Initialize(
    x => x.ForRequestedType<IDataRepository>()  
        .TheDefaultIsConcreteType<DataRepository>()  
        .CacheBy(InstanceScope.Hybrid));

Теперь весь код клиента должен разрешать / ссылаться только на интерфейс IDataRepository.

...