У меня был тот же вопрос некоторое время назад, и, наконец, я закончил создание класса реестра для каждого проекта и вызывал их каскадно.
Я обновлю код, когда вернусь домой.
Обновление
У меня было 3 проекта (Web, Services и Data), но я не хотел, например, добавлять ссылку на Data в мой Web-проект, поэтому я сделал так, что каждый проект отвечает за регистрацию своих собственных интерфейсов.
Например, в моем веб-проекте я создал класс WebRegistry, который не только регистрирует свои собственные типы, но также вызывает класс ServicesRegistry в моем проекте Services и так далее.
WebRegistry:
public class WebRegistry : Registry
{
public WebRegistry()
{
ObjectFactory.Configure(x =>
{
//call to ServicesRegistry in my services project
x.AddRegistry(new ServicesRegistry());
//Register your web classes here
ForRequestedType... blablablabla
});
}
}
ServicesRegistry:
public class ServicesRegistry : Registry
{
public ServicesRegistry()
{
ObjectFactory.Configure(x =>
{
x.AddRegistry(new DataRegistry());
//Register your services classes here
ForRequestedType... blablablabla
});
}
}
И, наконец, DataRegistry:
public class DataRegistry : Registry
{
public DataRegistry()
{
ObjectFactory.Configure(x =>
{
ForRequestedType blablbabla....
});
}
}
Я думаю, что в этом случае все совершенно идеально, и вам нужно всего лишь один вызов веб-реестра в вашем global.asax для настройки всего приложения:
/// <summary>
///
/// </summary>
public class Bootstrapper
{
/// <summary>
///
/// </summary>
public static void ConfigureStructureMap()
{
ObjectFactory.Initialize(x =>
{
x.AddRegistry(new WebRegistry());
});
}
}
Global.asax:
protected void Application_Start()
{
Bootstrapper.ConfigureStructureMap();
}