Simple Injector - Lifestyle Mismatch












0















I am using unit of work pattern for my transitions. I created an DbContext which is handling connection, commit, rollback works.



In my data access and business layer classes, I inject IDbContext by constructors.



public TestDAL(IDbContext dbContext) : base(dbContext) {}

public TestService(IDbContext dbContext, ITestDAL testDAL) {}


I moved simple injector from autofac. I'm getting an exception about lifestyle mismatch.




-[Lifestyle Mismatch] TestService (Async Scoped) depends on IDbContext implemented by DbContext (Transient).



-[Lifestyle Mismatch] TestDAL (Async Scoped) depends on IDbContext implemented by DbContext (Transient).




I register my DAL and Service classes as scoped and DbContext as transient.



var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };

foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}

container.Register<IDbContext, DbContext>(Lifestyle.Transient);


I read some about DbContext should be transient, it is not thread safe. Also I think DAL and Service classes not necessary to create transient. How can I fix this situation? Btw, that was not problem at autofac.










share|improve this question




















  • 2





    Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…

    – Steven
    Jan 2 at 8:00











  • @Steven thank you.

    – berkan
    Jan 2 at 11:23
















0















I am using unit of work pattern for my transitions. I created an DbContext which is handling connection, commit, rollback works.



In my data access and business layer classes, I inject IDbContext by constructors.



public TestDAL(IDbContext dbContext) : base(dbContext) {}

public TestService(IDbContext dbContext, ITestDAL testDAL) {}


I moved simple injector from autofac. I'm getting an exception about lifestyle mismatch.




-[Lifestyle Mismatch] TestService (Async Scoped) depends on IDbContext implemented by DbContext (Transient).



-[Lifestyle Mismatch] TestDAL (Async Scoped) depends on IDbContext implemented by DbContext (Transient).




I register my DAL and Service classes as scoped and DbContext as transient.



var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };

foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}

container.Register<IDbContext, DbContext>(Lifestyle.Transient);


I read some about DbContext should be transient, it is not thread safe. Also I think DAL and Service classes not necessary to create transient. How can I fix this situation? Btw, that was not problem at autofac.










share|improve this question




















  • 2





    Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…

    – Steven
    Jan 2 at 8:00











  • @Steven thank you.

    – berkan
    Jan 2 at 11:23














0












0








0








I am using unit of work pattern for my transitions. I created an DbContext which is handling connection, commit, rollback works.



In my data access and business layer classes, I inject IDbContext by constructors.



public TestDAL(IDbContext dbContext) : base(dbContext) {}

public TestService(IDbContext dbContext, ITestDAL testDAL) {}


I moved simple injector from autofac. I'm getting an exception about lifestyle mismatch.




-[Lifestyle Mismatch] TestService (Async Scoped) depends on IDbContext implemented by DbContext (Transient).



-[Lifestyle Mismatch] TestDAL (Async Scoped) depends on IDbContext implemented by DbContext (Transient).




I register my DAL and Service classes as scoped and DbContext as transient.



var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };

foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}

container.Register<IDbContext, DbContext>(Lifestyle.Transient);


I read some about DbContext should be transient, it is not thread safe. Also I think DAL and Service classes not necessary to create transient. How can I fix this situation? Btw, that was not problem at autofac.










share|improve this question
















I am using unit of work pattern for my transitions. I created an DbContext which is handling connection, commit, rollback works.



In my data access and business layer classes, I inject IDbContext by constructors.



public TestDAL(IDbContext dbContext) : base(dbContext) {}

public TestService(IDbContext dbContext, ITestDAL testDAL) {}


I moved simple injector from autofac. I'm getting an exception about lifestyle mismatch.




-[Lifestyle Mismatch] TestService (Async Scoped) depends on IDbContext implemented by DbContext (Transient).



-[Lifestyle Mismatch] TestDAL (Async Scoped) depends on IDbContext implemented by DbContext (Transient).




I register my DAL and Service classes as scoped and DbContext as transient.



var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };

foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}

container.Register<IDbContext, DbContext>(Lifestyle.Transient);


I read some about DbContext should be transient, it is not thread safe. Also I think DAL and Service classes not necessary to create transient. How can I fix this situation? Btw, that was not problem at autofac.







c# .net dependency-injection simple-injector






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 2 at 7:56







berkan

















asked Jan 2 at 6:58









berkanberkan

1281111




1281111








  • 2





    Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…

    – Steven
    Jan 2 at 8:00











  • @Steven thank you.

    – berkan
    Jan 2 at 11:23














  • 2





    Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…

    – Steven
    Jan 2 at 8:00











  • @Steven thank you.

    – berkan
    Jan 2 at 11:23








2




2





Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…

– Steven
Jan 2 at 8:00





Change your DbContext to Scoped. See: stackoverflow.com/questions/10585478/…

– Steven
Jan 2 at 8:00













@Steven thank you.

– berkan
Jan 2 at 11:23





@Steven thank you.

– berkan
Jan 2 at 11:23












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54002418%2fsimple-injector-lifestyle-mismatch%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54002418%2fsimple-injector-lifestyle-mismatch%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

How to fix TextFormField cause rebuild widget in Flutter

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith