4

私のコードは次のとおりです

IUnityContainer container = new UnityContainer(); 

container
.ConfigureAutoRegistration()
.LoadAssemblyFrom(typeof(Test).Assembly.Location)
.LoadAssemblyFrom(typeof(ITest).Assembly.Location)
.ApplyAutoRegistration();

これは私の最初の質問です。

ここで LoadAssemblyFrom メソッドを正しく使用したかどうかはわかりません。

ITest test = container.Resolve<ITest>(); 

コンパイルしようとすると、「ResolutionFailedException」という例外が発生します。

私は何を間違っていますか?

お時間をいただきありがとうございます。

4

2 に答える 2

1

これは、慣習に従って Unity を登録用にセットアップし、制御を依存性注入の世界に移す方法を示す、完全に機能するコンソールの例です。Unityこれを機能させるには、NuGet パッケージを追加する必要があります。

Unity v3.5 および VS 2012 でテスト済み。

#region
using System;
using Microsoft.Practices.Unity;

#endregion

namespace Demo___Unity
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            using (var container = new UnityContainer())
            {
                // Manual method.
                //container.RegisterType<IEntryPoint, EntryPoint>();
                //container.RegisterType<IInjected, Injected>();

                // Set up registration by convention.
                // http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx
                container.RegisterTypes(
                    AllClasses.FromAssembliesInBasePath(),
                    WithMappings.FromMatchingInterface,
                    WithName.Default,
                    WithLifetime.ContainerControlled);

                var controller = container.Resolve<IEntryPoint>();
                controller.Main();
            }
        }
    }

    public interface IEntryPoint
    {
        string Name { get; set; }
        void Main();
    }

    public class EntryPoint : IEntryPoint
    {
        private readonly IInjected Injected;

        public EntryPoint(IInjected injected)
        {
            Injected = injected;
        }

        public void Main()
        {
            Console.Write("Hello, world!\n");
            Injected.SubMain();
            Injected2.SubMain();
            Console.Write("[any key to continue]");
            Console.ReadKey();
        }

        // Demonstrates property injection.
        [Dependency]
        public IInjected Injected2 { get; set; }

        public string Name { get; set; }
    }

    public interface IInjected
    {
        void SubMain();
    }

    public class Injected : IInjected
    {
        public void SubMain()
        {
            Console.Write("Hello, sub world!\n");
        }

        public string Name { get; set; }
    }
}
于 2014-09-03T22:59:49.460 に答える