2015-01-28 1 views
-1

У меня есть простой MVC приложение, которое имеет 3 слояКак я могу использовать из автоматического реестра Structuremap в asp.net-mvc?

  1. Ui => имеет refrence на обыкновенные и услуги
  2. Общие
  3. Услуги => имеет refrence к общему

я определяю мой Сервисные контракты в Общего слоя и внедрить его в уровень услуг

//Common layer 
public interface IPersonService 
{ 
    void Foo(); 
} 
//Services layer 
public classPersonService:IPersonService 
{ 
    void Foo() 
    { 
    //To DO 
    } 
} 

В моей Global.asax я пишу этот код для первоначального StructureMap контейнера

ObjectFactory.Initialize(x => 
     { 
      x.Scan(scan => 
      { 
       scan.TheCallingAssembly(); 
       scan.WithDefaultConventions(); 
      }); 
     } 

Теперь в моем контроллере, когда я хочу получить экземпляр из IPersonService как этого

var personService= ObjectFactory.GetInstance<IPersonService>(); 

Я получаю эту ошибку

Значение по умолчанию не зарегистрировано и не может быть автоматически определено для типа '* .IPersonService'

Есть идеи по устранению проблемы?

ответ

1

Вы можете указать другие узлы для сканирования с помощью функции AssembliesFromApplicationBaseDirectory(), например, так:

scan.AssembliesFromApplicationBaseDirectory(a => a.FullName.StartsWith("YourNamespace.Common")); 
scan.AssembliesFromApplicationBaseDirectory(a => a.FullName.StartsWith("YourNamespace.Services")); 

Видя, как вы помечено этот вопрос как StructureMap 3 вопроса, я бы посоветовал против использования ObjectFactory, как Джереми Миллер (автор StructureMap) дал понять, что это will be removed in future version. Фактически, вы должны получить предупреждение о том, что оно будет удалено в будущей версии.

Вместо этого вы должны стремиться настроить контейнер таким образом:

IContainer container = new Container(); 
container.Configure(c => { 
    c.IncludeRegistry<YourRegistry>(); 
}); 

DependencyResolver.SetResolver(new StructureMapDependencyResolver(container)); 

Вы можете прочитать больше о реестрах StructureMap в here.

Смежные вопросы