Return 使用 Unity 的服务实例 (Class)

Return instance of Service(Class) using Unity

目前我有 class Factory 已经实现了 return 管理服务实例的方法(一些 class)

public static class Factory
{
    //#region UserNewEditDelete
    public static IUserBM UserCreation()
    {
        return new UserBM();
    }
    //#endregion
}

使用 Unity Framework 重写此 class 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>()

实施得好吗?谢谢。

统一容器的创建:

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();

Unity 与 ASP.NET MVC

安装 nuget package Unity.Mvc 后,从 UnityConfig.cs

编辑方法 RegisterTypes
    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;
    }
    ...

由于 UnityDependencyResolver 安装包时自动设置,Unity 将为您创建控制器,提供已注册类型的实例。

有关详细信息,请参阅 ASP.NET MVC 4 Dependency Injection