工程目录:
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); }配置完成就可以使用了: