В настоящее время я перехожу к использованию Ninject в текущую версию Castle Windsor для простого приложения на C # .NET.
По большей части преобразование прошло успешно, а реализация контейнеров выполнена безупречно. Однако у меня небольшая проблема с объектами репозитория.
У меня есть объект хранилища пользователя, который закодирован следующим образом:
public class UserRepository : IUserRepository {
public UserRepository(IObjectContext objectContext) {
// Check that the supplied arguments are valid.
Validate.Arguments.IsNotNull(objectContext, "objectContext");
// Initialize the local fields.
ObjectContext = objectContext;
}
public UserRepository(IObjectContextFactory factory)
: this(factory.CreateObjectContext()) {
}
// -----------------------------------------------
// Insert methods and properties...
// -----------------------------------------------
}
Чтобы соответствовать этому коду, я настроил следующие записи в файле конфигурации моего приложения:
<castle>
<components>
<component id="objectContextFactory" lifestyle="custom"
customLifestyleType="Common.Infrastructure.PerWebRequestLifestyleManager, Common.Castle"
service="Project.DAL.Context.IObjectContextFactory, Project.DAL.LINQ"
type="project.DAL.Context.ObjectContextFactory, Project.DAL.LINQ">
</component>
<component id="userRepository" lifestyle="custom"
customLifestyleType="Common.Infrastructure.PerWebRequestLifestyleManager, Common.Castle"
service="Project.BL.Repository.IUserRepository, Project.BL"
type="Project.BL.Repository.UserRepository, Project.BL.LINQ">
<parameters>
<factory>${objectContextFactory}</factory>
</parameters>
</component>
</components>
</castle>
Для меня все выглядит так, как должно. Когда я пытаюсь разрешить экземпляр службы IObjectContextFactory, я получаю объект ObjectContextFactory. Моя проблема возникает, когда я пытаюсь разрешить экземпляр службы IUserRepository. Я обращаюсь со следующим восхитительным исключением:
Невозможно создать компонент 'userRepository', так как он имеет зависимости, которые должны быть удовлетворены.
userRepository ожидает следующих зависимостей:
Услуги:
- SandCastle.DAL.Context.IObjectContext which was not registered.
Я перепробовал все, что мог придумать по этому поводу. Итак, вам, читатели stackoverflow, я говорю: есть идеи?