0

次のようにメッセージングクラスを登録して、期待どおりに正常に動作するホームコントローラーを使用して、Microsoft unity プロジェクト (最初に依存性注入を使用) を作成しました。

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

  return container;
}

課題は、このプロジェクトをプラグインとなるいくつかのモジュールの親にすることです。データベースの接続と操作を登録するにはどうすればよいですか? プロジェクトを再コンパイルせずに、最初に追加されなかった他のモジュールをプラグインするにはどうすればよいですか?

注: Code First を使用しています。

すべての支援に感謝します。

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 (NuGet 経由でダウンロードした場合は Unity Bootstrapper.cs) で、次のようなものを使用します。

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 に答える