我正在尝试为PerRequestLifetimeManager定义一个别名,并在容器配置部分使用它,但我不断收到此错误:“无法解析类型名称或别名PerRequestLifetimeManager。请检查您的配置文件并验证这一点类型名称。“我错过了什么?其他2个别名工作正常,但它们不在同一个dll中......
<!-- not working -->
<typeAlias alias="request" type="Microsoft.Practices.Unity.PerRequestLifetimeManager , Microsoft.Practices.Unity.Mvc"/>
<!-- working -->
<typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity"/>
<typeAlias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager, Microsoft.Practices.Unity"/>
更新
以下是我的Unity配置部分。我收到“无法解析类型名称或别名请求”。错误。
<unity>
<typeAliases>
<!-- Lifetime manager types -->
<typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity"/>
<typeAlias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager, Microsoft.Practices.Unity"/>
<typeAlias alias="request" type="Microsoft.Practices.Unity.PerRequestLifetimeManager , Microsoft.Practices.Unity.Mvc"/>
</typeAliases>
<containers>
<container name="main">
<types>
<type type="IProvider" mapTo="ConcreteProvider">
<lifetime type="request"/>
</type>
</types>
</container>
</containers>
</unity>
答案 0 :(得分:1)
只需将一些非常简单的样本放在一起,下面的设置就适合我。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration
.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="ILogger" type="ConsoleApplication2.ILogger, ConsoleApplication2" />
<alias alias="request" type="Microsoft.Practices.Unity.PerRequestLifetimeManager,
Microsoft.Practices.Unity.Mvc" />
<container name="MyContainer">
<register type="ILogger" mapTo="ConsoleApplication2.FileLogger,
ConsoleApplication2" />
</container>
</unity>
</configuration>
更新6/8/2014以获取以下评论。
一个。创建一个新项目i。 C#Console App .NET v 4.5 B.安装包Unity C.安装包Unity.Mvc
Package.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="CommonServiceLocator" version="1.2" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc" version="4.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="2.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="2.0.30506.0" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="Unity" version="3.5.1404.0" targetFramework="net45" />
<package id="Unity.Mvc" version="3.5.1404.0" targetFramework="net45" />
<package id="WebActivatorEx" version="2.0.5" targetFramework="net45" />
</packages>
使用配置文件。
using Microsoft.Practices.Unity.Configuration;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.LoadConfiguration("MyContainer");
var logger = container.Resolve<ILogger>();
Console.Read();
}
}
public interface ILogger
{
}
public class FileLogger : ILogger
{
}
}
答案 1 :(得分:0)
谢谢Spock。根据您的回答和评论,我能够完成实施。我试图在配置文件中注册 DbContext 并选择 LifetimeManager = PerRequestLifetimeManager 。最新的nuget软件包中的Unity软件包的名称空间已更改。
这是我的配置文件的样子
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration" />
<alias alias="PerRequest" type="Unity.AspNet.Mvc.PerRequestLifetimeManager, Unity.Mvc" />
在容器内,这是我注册dbcontext的方式
<register type ="MyNameSpace.DbEntities, AssemblyName" mapTo="MyNameSpace.DbEntities, AssemblyName">
<lifetime type="PerRequest"/>
</register>
谢谢。