Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一。自动注册??基于公约的登记统一_C#_.net_Unity Container_Design Patterns - Fatal编程技术网

C# 统一。自动注册??基于公约的登记统一

C# 统一。自动注册??基于公约的登记统一,c#,.net,unity-container,design-patterns,C#,.net,Unity Container,Design Patterns,我的代码如下 IUnityContainer container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom(typeof(Test).Assembly.Location) .LoadAssemblyFrom(typeof(ITest).Assembly.Location) .ApplyAutoRegistration(); 这是我的第一个问题 我不确定在此是否正确使用了L

我的代码如下

IUnityContainer container = new UnityContainer(); 

container
.ConfigureAutoRegistration()
.LoadAssemblyFrom(typeof(Test).Assembly.Location)
.LoadAssemblyFrom(typeof(ITest).Assembly.Location)
.ApplyAutoRegistration();
这是我的第一个问题

我不确定在此是否正确使用了LoadAssemblyFrom方法:

ITest test = container.Resolve<ITest>(); 
ITest test=container.Resolve();
当我试图编译时,我得到异常“ResolutionFailedException”

我做错了什么


提前感谢您的时间。

看来您需要的是:

container.ConfigureAutoRegistration()
         .LoadAssemblyFrom(typeof(ITest).Assembly.Location)
         .LoadAssemblyFrom(typeof(Test).Assembly.Location)
         .Include(If.ImplementsITypeName, Then.Register())
         .ApplyAutoRegistration();

这将告诉Unity.AutoRegistration注册所有类型,其中有一个名称相同的接口,前缀为I。

这里是一个完整的工作控制台示例,演示如何按照约定设置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; }
    }
}
#地区
使用制度;
使用Microsoft.Practices.Unity;
#端区
名称空间演示统一
{
内部课程计划
{
私有静态void Main(字符串[]args)
{
使用(var container=new UnityContainer())
{
//手动方法。
//container.RegisterType();
//container.RegisterType();
//按惯例设立注册。
// http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx
container.RegisterTypes(
AllClasses.FromAssembliesInBasePath(),
使用Mappings.FromMatchingInterface,
WithName.Default,
使用寿命。集装箱受控);
var controller=container.Resolve();
controller.Main();
}
}
}
公共接口IEntryPoint
{
字符串名称{get;set;}
void Main();
}
公共类入口点:IEntryPoint
{
私有只读注入;
公共入口点(注入式)
{
注入=注入;
}
公共图书馆
{
控制台。编写(“你好,世界!\n”);
submin();
注射2.子蛋白();
控制台。写入(“[任何要继续的键]”);
Console.ReadKey();
}
//演示属性注入。
[依赖性]
公共注入注入2{get;set;}
公共字符串名称{get;set;}
}
公共接口输入
{
空子蛋白();
}
注入的公共类:IInjected
{
公共空分
{
控制台。写入(“你好,子世界!\n”);
}
公共字符串名称{get;set;}
}
}