目前我有类Factory
已经实现了返回管理服务实例的方法(某些类)
public static class Factory
{
//#region UserNewEditDelete
public static IUserBM UserCreation()
{
return new UserBM();
}
//#endregion
}
使用Unity Framework重写此类Factory
的正确方法是什么?
我的愿景::
我的工厂:
public static class Factory
{
public static void Register(IUnityContainer container)
{
container.RegisterType<IUserBM, UserBM>();
}
}
在Global.asax中注册:
Factory.Register(UnityConfig.GetConfiguredContainer());
当我需要使用管理服务时:
UnityConfig.Container.Resolve<IUserBM>()
这是好的实施吗?感谢。
答案 0 :(得分:1)
创建统一容器:
var unityContainer = new UnityContainer();
unityContainer.RegisterType<IUserBM, UserBM>();
需要实例时的用法:
var userBm = unityContainer.Resolve<IUserBM>();
Unity非常聪明,可以在需要时注入该类型,例如:
public class A
{
private IUserBM userBm;
public A(IUserBM userBm)
{
this.userBm = userBm;
}
public void DoSomething()
{
this.userBm.Work();
}
}
// this will construct an instance of class A injecting required types
var a = unityContainer.Resolve<A>();
a.DoSomething();
与ASP.NET MVC的Unity
安装nuget package Unity.Mvc后,从RegisterTypes
UnityConfig.cs
public static void RegisterTypes(IUnityContainer container)
{
unityContainer.RegisterType<IUserBM, UserBM>();
}
现在,如果您需要控制器中的IUserBm
实例,请添加构造函数参数:
public class HomeController : Controller
{
private IUserBm userBm;
public HomeController(IUserBm userBm)
{
this.userBm = userBm;
}
...
Unity将为您创建一个控制器,提供已注册类型的实例,这要归功于安装软件包时自动设置UnityDependencyResolver
。
有关详细信息,请参阅ASP.NET MVC 4 Dependency Injection