工程目录:
1. IService 接口层,新增IUserService . IBaseService 是定义的一个基础类
namespace IService
{
public interface IUserService: IBaseService<User>
{
string getUserName();
}
}
2. Service 接口实现层,新增UserServices实现IUserService
namespace Service
{
public class UserService: BaseService<User>,IUserService
{
public string getUserName()
{
return "user1";
}
}
}
3. 工程 UnityResposityory :unity 管理(当前使用 5.11.2.0 版本),UnityHelper代码:
public class UnityHelper
{
public static IUnityContainer container;
/// <summary>
/// unity 注册
/// </summary>
public static void Register()
{
container = new UnityContainer();
UnityConfigurationSection config = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
config.Configure(container, "containerOne");
}
public static T Resolve<T>()
{
try
{
return container.Resolve<T>();
}
catch(Exception ex)
{
throw ex;
}
}
}
3. 此demo通过配置的方式完成注册,所以配置webconfig
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration" />
</configSections>
<unity>
<containers>
<container name="containerOne">
<types>
<type type="IService.IUserService,IService" mapTo="Service.UserService,Service" />
</types>
</container>
</containers>
</unity>
4.在站点内新增方法UnityDependencyResolver,实现接口IDependencyResolver(mvc站点和api在不同程序集内,实现方法有一点不同)
namespace TestWeb.Helper
{
public class UnityDependencyResolver : IDependencyResolver
{
protected IUnityContainer container;
public UnityDependencyResolver(IUnityContainer container)
{
this.container = container;
}
/// <summary>
/// mvc webAPI 需要实现此方法
/// </summary>
/// <returns></returns>
public IDependencyScope BeginScope()
{
return this;
}
public void Dispose()
{
throw new NotImplementedException();
}
public object GetService(Type serviceType)
{
try
{
return container.Resolve(serviceType);
}
catch (ResolutionFailedException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return container.ResolveAll(serviceType);
}
catch (ResolutionFailedException)
{
return new List<object>();
}
}
}
}
5. 在global.asax 实现注册unity
a. web站点注册
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
UnityHelper.Register();
//mvc 网站注册方法
DependencyResolver.SetResolver(new UnityDependencyResolver(UnityHelper.container));
}
b. web api 注册
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
UnityHelper.Register();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(UnityHelper.container);
}
配置完成就可以使用了: