2

次のコンストラクタがあります。

public ReferenceService(
    IAzureTable<Reference> referenceRepository)
{
    _referenceRepository = referenceRepository;
}

public ReferenceService(CloudStorageAccount devStorageAccount)
{
    _referenceRepository = new AzureTable<Reference>(devStorageAccount, "TestReferences");
}

そしてBootstrapper.csで

CloudStorageAccount storageAccount;
        storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
        var container = new UnityContainer();
        container.RegisterType<IReferenceService, ReferenceService>();

Unity にサービスを解決させようとすると、1 つのパラメーターを持つ複数のコンストラクターがあるというエラー メッセージが表示されます。

[ResolutionFailedException: Resolution of the dependency failed, type = "WebUx.xController", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The type ReferenceService has multiple constructors of length 1. Unable to disambiguate.
-----------------------------------------------
At the time of the exception, the container was:

  Resolving WebUx.xController,(none)
  Resolving parameter "referenceService" of constructor WebUx.xController(
Storage.Services.IContentService contentService,  
Storage.Services.IReferenceService referenceService
)
    Resolving Storage.Services.ReferenceService,(none) (mapped from Storage.Services.IReferenceService, (none))
]

Unity に 2 つのコンストラクターのいずれかを強制的に使用させる方法はありますか?

4

2 に答える 2

4

1 つの方法は、必要なコンストラクターにInjectionConstructorAttributeで注釈を付けることです。

ターゲット クラスに同じ数のパラメーターを持つ複数のコンストラクターが含まれている場合は、コンストラクターに InjectionConstructor 属性を適用する必要があります。

サンプル:

[InjectionConstructor]
public ReferenceService(IAzureTable<Reference> referenceRepository)
{
    _referenceRepository = referenceRepository;
}

public ReferenceService(CloudStorageAccount devStorageAccount)
{
    _referenceRepository = new AzureTable<Reference>(devStorageAccount, "TestReferences");
}
于 2012-11-11T03:29:38.243 に答える
2

InjectionConstructorを試してください。

container.RegisterType<IReferenceService, ReferenceService>();

への変更

container.RegisterType<IReferenceService, ReferenceService>(new InjectionConstructor());

パラメータなしで使用したい場合。

于 2012-11-11T03:27:56.717 に答える