开发者

Unity (in PRISM) does (not) weird resolving...??!!

I 'm using PRISM and in the Bootstrapper class i did override the ConfigureContainer() method. There is nothing fancy in it just these lines:

protected override void ConfigureContainer()
{       
    Container.RegisterType<IDataContext, SQ开发者_JAVA技巧LDataContext>(new InjectionConstructor(@"Server=localhost\SQLExpress;User Id=sa;Password=xxxxx;Database=MyDatabase"));
        base.ConfigureContainer();
}

At "debug-time" i try to call Container.Resolve() but this gives me the following error:

{"Resolution of the dependency failed, type = \"Photo.DAL.Abstract.IDataContext\", name = \"\". Exception message is: The current build operation (build key Build Key[Photo.DAL.Concrete.SQLDataContext, null]) failed: Value cannot be null.\r\nParameter name: stream (Strategy type BuildPlanStrategy, index 3)"} System.Exception {Microsoft.Practices.Unity.ResolutionFailedException}

But when i do

Container.IsTypeRegistered(typeof(IDataContext))

I get true!!!

  • What am I missing???

Info which published as answer below, which should be an edit to the question:

This is the full stack:

Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Photo.DAL.Abstract.IDataContext", name = "". Exception message is: The current build operation (build key Build Key[Photo.DAL.Concrete.SQLDataContext, null]) failed: Value cannot be null.
Parameter name: stream (Strategy type BuildPlanStrategy, index 3) ---> Microsoft.Practices.ObjectBuilder2.BuildFailedException: The current build operation (build key Build Key[Photo.DAL.Concrete.SQLDataContext, null]) failed: Value cannot be null.
Parameter name: stream (Strategy type BuildPlanStrategy, index 3) ---> System.ArgumentNullException: Value cannot be null.
Parameter name: stream
   at System.Data.Linq.Mapping.XmlMappingSource.FromStream(Stream stream)
   at Photo.DAL.Mapping.GetMapping() in C:\Users\Savvas\Documents\Visual Studio 2008\Projects\Photo\Photo.DAL\Mapping.cs:line 18
   at Photo.DAL.Concrete.SQLDataContext..ctor(String connectionString) in C:\Users\Savvas\Documents\Visual Studio 2008\Projects\Photo\Photo.DAL\Concrete\SQLDataContext.cs:line 52
   at BuildUp_Photo.DAL.Concrete.SQLDataContext(IBuilderContext )
   at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
   at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
   at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
   --- End of inner exception stack trace ---
   at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
   at Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing)
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name)
   --- End of inner exception stack trace ---
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name)
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name)
   at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name)
   at Microsoft.Practices.Unity.UnityContainerBase.Resolve(Type t)
   at Microsoft.Practices.Unity.UnityContainerBase.Resolve[T]()
   at Photo.Desktop.Bootstrapper.ConfigureContainer() in C:\Users\Savvas\Documents\Visual Studio 2008\Projects\Photo\Photo.Desktop\Bootstrapper.cs:line 42

I noticed that the error is not coming from actually resolving the class, but from the calling method GetMapping() which is defined as

public static class Mapping
    {
        public static XmlMappingSource GetMapping()
        {
            XmlMappingSource mapping;
            using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Photo.DAL.Entities.Entities.map"))
            {
                mapping = XmlMappingSource.FromStream(stream);
            }
            return mapping;
        }
    }
  • Is Unity incapable of doing this? (it worked well with Windsor!!)


It could be one of two things.. it's not clear from your exception exactly...

  1. Likely there is another inner exception that might be masked?

  2. Otherwise it might be that your SqlDataContext class has a constructor that accepts a stream?

Again, the exception isn't quite clear enough (at least to me). If neither of these suggestions helps, could you post the full out put of $exception.ToString() in your question?

Edit: according to your full stack trace, the line of code failing is this one:

using (Stream stream = Assembly.
                       GetExecutingAssembly().
                       GetManifestResourceStream("Photo.DAL.Entities.Entities.map"))
{
    //This line is failing with null argument
    mapping = XmlMappingSource.FromStream(stream);
}

Your resource stream is coming back null, which either indicates your resource does not exist or the assembly couldn't be loaded (sometimes this refers to a satellite assembly). I would suspect the former first... check to make sure the Build setting is correct on your .map file.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜