2

私はそれを実装する2つのクラスを持つ1つのインターフェースを持っています.各クラスをロードする必要がありますが、ユニティには次のものがあります:

m_unityContainer.Resolve() // IGeneric インターフェイスはどこにありますか

私の設定は次のようになります:

      <type type="IGeneric" mapTo="ClassA">
      </type>
      <type type="IGeneric" mapTo="ClassB">
      </type>

何か案は?

ありがとう

4

5 に答える 5

2

次のように汎用インターフェイスを使用することもできます。

public interface IGeneric{}

public interface IGeneric<T> : IGeneric{}

次に、インターフェースの型安全な解決を行います。

container.RegisterType<IGeneric<ClassA>, ClassA>();
container.RegisterType<IGeneric<ClassB>, ClassB>();

ClassA classA = container.Resolve<IGeneric<ClassA>>();
ClassB classB = container.Resolve<IGeneric<ClassB>>();

この道を下っていくと面白いことが起こり始めます...

于 2009-04-01T00:42:27.093 に答える
1

これにより、IGeneric を実装するすべての登録済みクラスが得られます。

IEnumerable<IGeneric> objects = container.ResolveAll<IGeneric>();
于 2009-03-13T21:03:24.030 に答える
0

私は解決策を見つけました。各エントリでnameプロパティを使用する必要があります。




コードはobj=container.ResolveAll( "ClassA");のようになります。

于 2009-03-16T15:11:24.297 に答える
0

ここでは、少し異なる方法を示します。Unity.2.1.505.2 を使用しています (違いが生じる場合に備えて)。

  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>


      <unity>
        <container>
          <register type="IVehicle" mapTo="Car" name="myCarKey" />
          <register type="IVehicle" mapTo="Truck" name="myTruckKey" />
        </container>
      </unity>

これが DotNet コードです。

        UnityContainer container = new UnityContainer();

        UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
        section.Configure(container);


IVehicle v1 = container.Resolve<IVehicle>("myCarKey"); 

IVehicle v2 = container.Resolve<IVehicle>("myTruckKey"); 

見る:

http://msdn.microsoft.com/en-us/library/ff664762(v=pandp.50).aspx

于 2013-02-05T14:17:16.613 に答える
0

シャルク - 良さそうです。Unity.config でそれを指定するための表記法は何ですか?

于 2009-04-26T22:04:15.743 に答える