2017-09-01 13 views
0

私は統一に8時間あり、すでにいくつかのことを考え出していますが、これで角度を見つけることはできません。私はロガーとResourceMaを振る舞うしたい他の解決されたタイプのパラメータとしてのユニティ使用の解決済みタイプ

public class ResourceManager : IResourceManager 
{ 
    public ResourceManager(ILogger logger, string path) 
    { 
     Logger = logger; 
     Path = path; 
    } 
    public ILogger Logger { get; set; } 
    public string Path { get; set; } 
} 

Futhermore

public class Logger : ILogger 
{ } 

し、最終的に

public ResourceManagerController(ILogger logger, IResourceManager imageResourceManager) 
{} 

:私はIResourceManager

public interface IResourceManager 
{ 
    ILogger Logger { get; set; } 
    string Path { get; set; } 
} 

と対応するタイプですシングルトンのようなネイガー。私はIResourceManagerにILoggerが存在しなくても動作するようにしましたが、 "デフォルトのコンストラクタはありません"という例外が出ています。

は、これまでのところ私が持っている:

public static void Register(HttpConfiguration config) 
{ 
    var container = new UnityContainer(); 

    container.RegisterType<ILogger, Logger>("DefaultLogger", new ContainerControlledLifetimeManager()); 

    container.RegisterType<IResourceManager, ResourceManager>("imageResourceManager", new ContainerControlledLifetimeManager(), 
     new InjectionConstructor(new ResolvedParameter<ILogger>("DefaultLogger"), "basePath")); 

    config.DependencyResolver = new UnityResolver(container); 

    // Web API routes ... 
} 

どのように私は成功したResourceManagerControllerイストのインスタンス化との両方LoggerResourceManagerがシングルトンとして使用されているように、私のタイプを登録する必要がありますか?

答えて

0

デフォルトで使用するロガーを登録する場合は、登録に名前を付ける必要はありません。 すべての名前付き登録が必要な場合は、配列を1つずつ挿入します。

どちらか...

container.RegisterType<ILogger, Logger>(new ContainerControlledLifetimeManager()); 
container.RegisterType<IResourceManager, ResourceManager>(new ContainerControlledLifetimeManager(), new InjectionConstructor(new ResolvedParameter<ILogger>(), "basePath")); 

public ResourceManagerController(ILogger logger, IResourceManager imageResourceManager) 
{} 

か...

container.RegisterType<ILogger, Logger>(new ContainerControlledLifetimeManager()); 
container.RegisterType<IResourceManager, ResourceManager>("imageResourceManager", new ContainerControlledLifetimeManager(), new InjectionConstructor(new ResolvedParameter<ILogger>(), "basePath")); 

public ResourceManagerController(ILogger logger, IResourceManager[] allResourceManagers) 
{} 
関連する問題