0

我创建了一个 Microsoft 统一项目(我的第一个使用依赖注入),我的家庭控制器按预期工作,并按如下方式注册了我的消息传递类

 private static IUnityContainer BuildUnityContainer()
{
  var container = new UnityContainer(); 
  container.RegisterType<IMessageService, MessageService>(new HierarchicalLifetimeManager());
  RegisterTypes(container);

  return container;
}

挑战是我打算让这个项目成为几个模块的父级插件,我如何注册我的数据库连接和操作?如何在不重新编译项目的情况下插入最初未添加的其他模块?

注意:我使用的是代码优先。

我们将不胜感激所有帮助。

4

1 回答 1

1

首先,您需要注册 Unity 配置部分。看起来像这样:

<section name="unity" 
         type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=2.1.505.0, Culture=neutral, PublickKeyToken=31bf3856ad364e35" />

这是 Unity 2 配置。接下来是添加统一部分。

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <!-- General aliases -->
    <alias alias="string" type="System.String, mscorlib" />
    <alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity, Version=2.1.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <!-- Interface aliases -->
    <alias alias="ISampleService" type="MyApp.Api.Interfaces.Services.ISampleService, MyApp.Api" />
    <alias alias="IMessagingService" type="MyApp.Api.Interfaces.Services.IMessagingService, MyApp.Api" />

    <!-- Concrete implementations aliases -->
    <alias alias="SampleServiceImpl" type="MyApp.BizLayer.SampleService, MyApp.BizLayer" />
    <alias alias="MessagingServiceImpl" type="MyApp.BizLayer.SampleService, MyApp.BizLayer" />

    <container>
       <register type="SampleServiceImpl" mapTo="ISampleService"/>
       <register type="MessagingServiceImpl" mapTo="IMessagingService">
          <lifetime type="singleton" />
       </register>
    </container>
</unity>

在您的代码中,在 global.asax(或 Unity Bootstrapper.cs,如果您通过 NuGet 下载它)中,您将使用如下内容:

public static class UnityBootstrapper
{
    public static void Initialise()
    {
        var container = BuildUnityContainer();

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));

        var resolver = DependencyResolver.Current;
        var newResolver = new Infrastructure.IoC.UnityDependencyResolver(container, resolver);

        DependencyResolver.SetResolver(newResolver);
    }

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();
        var unityConfigSection = WebConfigurationManager.GetSection("unity") as UnityConfigurationSection;

        if (unityConfigSection != null)
        {
            unityConfigSection.Configure(container);
        }

        return container;
    }
}

这里的所有都是它的。

于 2013-06-08T12:34:00.510 回答