На данный момент у меня есть следующее:
Декларация:
namespace Contracts // Contracts.dll
{
public interface IUserRepository : IUserRepository
{
}
}
Реализация:
namespace Data // Data.dll
{
class UserRepository : Contracts.IUserRepository
{
}
}
Утилита IoC:
namespace Core // Core.dll
{
public static class IoC
{
private static IUnityContainer _container = LoadContainer();
private static IUnityContainer LoadContainer()
{
var unitySection = (Microsoft.Practices.Unity.Configuration.UnityConfigurationSection)ConfigurationManager.OpenMappedExeConfiguration(
new ExeConfigurationFileMap { ExeConfigFilename = System.Web.HttpContext.Current.Server.MapPath(UserSettings.UnityContainerPath) },
ConfigurationUserLevel.None).GetSection("unity");
var container = new UnityContainer();
unitySection.Configure(container);
return container;
}
public static T Resolve<T>()
{
return _container.Resolve<T>();
}
}
}
Unity.config:
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity>
<containers>
<container>
<types>
<type type="Contracts.IUserRepository, Contracts" mapTo="Data.UserRepository, Data">
<lifetime type="singleton" />
</type>
</types>
</container>
</containers>
</unity>
</configuration>