1

Unity Dependency Injectionに問題があります。コンストラクタインジェクションを使用しようとすると、私のインジェクションされたサービスは空のままです。依存性注入 - Unityコンストラクタ注入が機能しない、ゲッタセッタ注入のみ

public UserService(IUnitOfWorkIntranet unitOfWork, IUserRepository userRepository) 
    { 
    mappingToDomainModel = IntranetMappingToDomainModel.GetMappingToDomainModelInstance; 
    IntranetAutoMapperConfiguration autoMapper = IntranetAutoMapperConfiguration.GetAutoMapperConfigurationInstance; 
    unitOfWorkIntranet = unitOfWork; 
    userRepository = userRepository; 
    } 

しかし、私がゲッターを使用すると、すべて正常に動作します。

私の知る限りでは、それがUnityConfig.cs

で正しく設定されて
private IUserRepository _userRepository 
    { 
     get 
    { 
     return GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IUserRepository)) as UserRepository; 
    } 
    } 

container.RegisterType<IUnitOfWorkIntranet, UnitOfWorkIntranet>(); 
container.RegisterType<IUserService, UserService>(); 
container.RegisterType<IUserRepository, UserRepository>(); 

私はここで何かが足りないのですか?私のコンストラクタの注射が壊れているのはなぜですか?

助けを歓迎します、よろしく!

+0

を 'UserService'が解決どのように? –

+0

@ Sergey Shushlyapinご回答ありがとうございます!これは、コントローラ内のgetter setter Dependency Injection(Unityを使用)を使用して解決されます。 – InSum

+0

あなたはそれを行うことができますが、それはプロパティインジェクションがオプションと見なされるため、むしろ回避策です。私は、 'IUserRepository'が' UserService'の依存関係であると仮定して、この関係を明確にするためにコンストラクタを介して注入する必要があります。 –

答えて

0

ありユニティを使用してコンストラクタ・インジェクションの簡単な作業例です。

public interface IUnitOfWorkIntranet { } 

public class UnitOfWorkIntranet : IUnitOfWorkIntranet{} 

public interface IUserRepository { } 

public class UserRepository : IUserRepository{} 

public interface IUserService{} 

public class UserService : IUserService 
{ 
    public IUnitOfWorkIntranet UnitOfWork { get; } 
    public IUserRepository UserRepository { get; } 
    public UserService(IUnitOfWorkIntranet unitOfWork, IUserRepository userRepository) 
    { 
     UnitOfWork = unitOfWork; 
     UserRepository = userRepository; 
    } 
} 

の設定はして解決:

var container = new UnityContainer(); 
container.RegisterType<IUnitOfWorkIntranet, UnitOfWorkIntranet>(); 
container.RegisterType<IUserService, UserService>(); 
container.RegisterType<IUserRepository, UserRepository>(); 

var service = (UserService)container.Resolve<IUserService>(); 
+0

これは、私たちのコードが現在どのようになっているかについてです。私はpublicを追加しました。IUnitOfWorkIntranet UnitOfWork {get; }パブリックIUserRepository UserRepository {get;} }これは問題を解決していないようです。 – InSum

+0

'UserService'クラスにデフォルトコンストラクタがありますか?私は、[Unity Dependency Resolver](https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4- dependency-injection)の可能性があります正しく構成されていない。 –

+0

私はそうは思わない、UserServiceクラスの唯一のコンストラクタは、上記のポストに記載されています。これまでのすべての努力に感謝します! – InSum