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

ли даже настроить MVC3 для использования DependencyResolver, чтобы получить пользовательский ModelMetadataProvider или ModelValidatorProvider? Потому что на данный момент я не могу заставить его работать так, как когда-либо через DependencyResolver. Если я устанавливаю это явно через код в global.asax, он работает отлично, но IoC просто молча игнорирует мой код. Я использую пакет StructureMap от NuGet, так что ничего особенного.

Мои текущие подключения через global.asax Global.asax.cs

ModelMetadataProviders.Current = new RedSandMetadataProvider(ModelMetadataProviders.Current);

ModelValidatorProviders.Providers.Add(new RedSandValidatorProvider((IUnitOfWork)DependencyResolver.Current.GetService(typeof (IUnitOfWork))));

Они работают отлично. Я должен передать текущий ModelMetaDataProvider в качестве конструктора моему собственному, потому что вы можете одновременно подключать только один ModelMetaDataProvider. Поэтому я обрабатываю нужные мне вызовы, проверяя параметры метода и позволяя остальным перейти к базовой реализации.

Мой ModelValidatorProviders использует объект IUnitOfWork, у которого есть свойство Session, заполненное nHibernate. Я делаю это, потому что мне нужно определить, какие правила проверки определены в базе данных на основе проверяемого свойства.

Опять же, оба они работают. Но каждый раз, когда я пытаюсь настроить их, используя StructureMap, чтобы они были доступны для DependencyResolver, я не могу получить желаемый результат. Кто-нибудь еще делал это раньше и заставил его работать на самом деле полностью? Есть ли что-то необычное, что мне нужно сделать из-за параметров конструкторов? Существует ли определенный жизненный цикл, который должен быть установлен в регистрации StructureMap этих типов? Я смотрелвезде для примеров этого, но все они либо ссылаются на бета-версии, либо выпускают кандидатов MVC3, которые не относятся к окончательной версии, или являются статьями, в которых говорится, что это возможно, но на самом деле это не доказывается на примере.

Я ДЕЙСТВИТЕЛЬНО был бы признателен за чью-либо помощь в этом, потому что я стараюсь изо всех сил, насколько это должно быть просто, что все ресурсы в сети СКАЖИ, что это возможно, но я не могу в течение жизни повторить любое из их требований.

Обновить

Я использовал StructureMap.MVC3 1.0.5, я только что обновился до 1.0.6 после того, как заметил, что произошло обновление, однако между версиями, похоже, нет большой разницы?

Моя структура StructureMap

public static IContainer Initialize() {
    ObjectFactory.Initialize(x =>
                {
                    x.Scan(scan =>
                        {
                                //scan.AssembliesFromApplicationBaseDirectory(); //Would this let us setup dependancy injection to dynamically load plugins?
                                scan.TheCallingAssembly();
                                scan.WithDefaultConventions();
                                scan.LookForRegistries();
                            });
                    //x.For<IExample>().Use<Example>();

                    //x.For<ITempDataProvider>().Use( new CookieTempDataProvider(HttpContext.Current.Request.RequestContext.HttpContext));
                    //x.For<ModelMetadataProvider>().Singleton().Use(new RedSandMetadataProvider(ModelMetadataProviders.Current));
                    //x.For<ModelValidatorProvider>().Use<RedSandValidatorProvider>();
                });
    return ObjectFactory.Container;
}

Я позволил Разрешителю зависимостей быть установленным методом Start (), добавленным пакетом с помощью WebActivator.

Вы можете увидеть строки, которые я пытался использовать для регистрации своих метаданных и провайдеров валидаторов. Я не знаю, правильно ли я это делал или нет. Я добавил вызов для сканирования реестров, потому что у меня есть реестр для настройки и добавления nhibernate в контейнер Structuremap.

Ответы на вопрос(1)

Ваш ответ на вопрос